OpenSSH 禁用给定主机名的 ControlMaster

And*_*nih 22 ssh mac-osx

我正在使用OpenSSH_5.9p1, OpenSSL 0.9.8r 8 Feb 2011Mac OS X Snow Leopard。我ControlMaster配置了用于维护持久连接的功能。我~/.ssh/config有以下几点:

Host *
  ControlPath /ms/%r@%h:%p
  ControlMaster auto
  ControlPersist 4h

Host *.unfuddle.com
  ControlMaster no
Run Code Online (Sandbox Code Playgroud)

但是,据我所知 - 即使我尝试将 SSH 用于 unfuddle.com 主机,也总是会创建主连接:

[andrey-mbp ~]$ ssh -v git@droolit.unfuddle.com
OpenSSH_5.9p1、OpenSSL 0.9.8r 2011 年 2 月 8 日
debug1:读取配置数据 /Users/akhkharu/.ssh/config
debug1: /Users/akhkharu/.ssh/config line 1: Applying options for *
debug1:/Users/akhkharu/.ssh/config 第 6 行:为 *.unfuddle.com 应用选项
debug1:读取配置数据 /usr/local/Cellar/openssh/5.9p1/etc/ssh_config
debug1:自动复用:尝试现有的主
debug1:控制套接字“/ms/git@droolit.unfuddle.com:22”不存在
debug1:连接到 droolit.unfuddle.com [174.129.5.196] 端口 22。
debug1:连接建立。
debug1:身份文件 /Users/akhkharu/.ssh/id_rsa 类型 1
debug1:身份文件/Users/akhkharu/.ssh/id_rsa-cert type -1
debug1:身份文件 /Users/akhkharu/.ssh/id_dsa 类型 2
debug1:身份文件/Users/akhkharu/.ssh/id_dsa-cert type -1
debug1:身份文件/Users/akhkharu/.ssh/id_ecdsa type -1
debug1:身份文件/Users/akhkharu/.ssh/id_ecdsa-cert type -1
debug1:远程协议版本2.0,远程软件版本OpenSSH_5.8
debug1:匹配:OpenSSH_5.8 pat OpenSSH*
debug1:启用协议 2.0 的兼容模式
debug1:本地版本字符串 SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT 发送
debug1:收到 SSH2_MSG_KEXINIT
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: 客户端->服务器 aes128-ctr hmac-md5 无
debug1:发送 SSH2_MSG_KEX_ECDH_INIT
debug1:期待 SSH2_MSG_KEX_ECDH_REPLY
debug1:服务器主机密钥:RSA a6:74:33:36:95:31:6e:a6:d7:71:87:b8:3c:38:e2:60
debug1:主机 'droolit.unfuddle.com' 已知并与 RSA 主机密钥匹配。
debug1:在 /Users/akhkharu/.ssh/known_hosts:390 中找到密钥
debug1:ssh_rsa_verify:签名正确
debug1: SSH2_MSG_NEWKEYS 发送
debug1:期待 SSH2_MSG_NEWKEYS
debug1:收到 SSH2_MSG_NEWKEYS
debug1:服务器不允许漫游
debug1: SSH2_MSG_SERVICE_REQUEST 发送
debug1:收到 SSH2_MSG_SERVICE_ACCEPT
debug1:可以继续的身份验证:publickey
debug1:下一个身份验证方法:publickey
debug1:提供 RSA 公钥:/Users/akhkharu/.ssh/id_rsa
debug1:服务器接受密钥:pkalg ssh-rsa blen 277
debug1:认证成功(公钥)。
已通过 droolit.unfuddle.com ([174.129.5.196]:22) 的身份验证。
debug1:设置多路复用主套接字
debug1:通道 0:新 [/ms/git@droolit.unfuddle.com:22]
debug1:control_persist_detach:后台主进程
debug1:分叉到后台
debug1:进入交互式会话。
debug1:复用控制连接
调试 1:通道 1:新的 [多路复用控制]
调试 1:通道 2:新的 [客户端会话]
debug1:远程:强制命令。
debug1:远程:端口转发已禁用。
debug1:远程:X11 转发已禁用。
debug1:远程:代理转发已禁用。
debug1:远程:禁用 Pty 分配。
debug1:远程:强制命令。
debug1:远程:端口转发已禁用。
debug1:远程:X11 转发已禁用。
debug1:远程:代理转发已禁用。
debug1:远程:禁用 Pty 分配。
debug1:mux_client_request_session:主会话 ID:2
PTY 分配请求失败
需要 SSH_ORIGINAL_COMMAND
debug1:client_input_channel_req:通道 2 rtype 退出状态回复 0
debug1:client_input_channel_req:通道 2 rtype eow@openssh.com 回复 0
调试 1:通道 2:免费:客户端会话,nchannels 3
debug1:通道 1:空闲:多路复用控制,nchannels 2
与 droolit.unfuddle.com 的共享连接已关闭。
[andrey-mbp ~]$ ll /ms/
共 0
srw------- 1 akhkharu admin 0B Jul 17 11:55 git@droolit.unfuddle.com:22

谢谢,
安德烈。

Ign*_*ams 24

您的*主机节正在捕捉它。更早地放置更具体的主机节。

  • 你的意思是......当你更早地放置更具体的主机节时? (10认同)
  • 恐怕直到我去世的那一天,我都会想知道安德烈是否意识到这个答案是正确的,并且他同意的评论指出了这一点。 (2认同)

小智 13

我在 SuperUser 上的类似问题的回答中所述,您可以使用“bang”语法从原始Host *节中排除特定主机,如下所示:

Host * !*.unfuddle.com
    ControlPath /ms/%r@%h:%p
    ControlMaster auto
    ControlPersist 4h
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我发现Host使用 aHost *时节的顺序似乎无关紧要,但上述方法始终有效。


小智 6

对我来说,它的工作原理,当我还设置ControlPathnone该内host节。

你可以试试:

Host *.unfuddle.com   
    ControlMaster no
    ControlPath none
Run Code Online (Sandbox Code Playgroud)

然后将不会生成控制会话。