OpenSSH为给定的主机名禁用ControlMaster


20

我正在使用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

但是,从我所看到的-即使试图将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第1行:为*应用选项
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类型-1
debug1:身份文件/Users/akhkharu/.ssh/id_dsa类型2
debug1:身份文件/Users/akhkharu/.ssh/id_dsa-cert类型-1
debug1:身份文件/Users/akhkharu/.ssh/id_ecdsa类型-1
debug1:身份文件/Users/akhkharu/.ssh/id_ecdsa-cert类型-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:服务器->客户端aes128-ctr hmac-md5无
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:设置Multiplex主套接字
debug1:频道0:新[/ms/git@droolit.unfuddle.com:22]
debug1:control_persist_detach:后台主进程
debug1:分叉到后台
debug1:进入交互式会话。
debug1:多路控制连接
debug1:通道1:新的[mux-control]
debug1:渠道2:新的[client-session]
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
debug1:通道2:免费:客户端会话,nchannels 3
debug1:通道1:空闲:mux-control,nchannels 2
与droolit.unfuddle.com的共享连接已关闭。
[andrey-mbp〜] $ ll / ms /
总计0
srw ------- 1 akhkharu admin 0B Jul 17 11:55 git@droolit.unfuddle.com:22

谢谢,
安德烈。

Answers:


19

您的*宿主节正在捕获它。放更具体的宿主节。


谢谢,但是那对我不起作用。我需要为所有主机启用ControlMaster,但不需要为unfuddle.com启用。我无法列出配置文件中使用的所有主机。似乎正在起作用的是在一开始就将规则放在unfuddle.com上。
安德烈·切尔尼

8
您的意思是...当您较早放置更具体的宿主节时?
伊格纳西奥·巴斯克斯

是的,很奇怪,但是有效。
Andrey Chernih 2012年

我一直在搜寻手册页很多年了,但这是一个奇怪的优先事项!
JanKanis 2012年

1
恐怕直到垂死的一天,我都会怀疑安德烈是否会抓住这个答案是正确的事实,而他同意的评论指出了这一点。
千寻超人

10

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

Host * !*.unfuddle.com
    ControlPath /ms/%r@%h:%p
    ControlMaster auto
    ControlPersist 4h

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


5

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

你可以试试:

Host *.unfuddle.com   
    ControlMaster no
    ControlPath none

这样就不会产生控制会话。


在我的情况下,我必须这样做,然后将该Host *部分放在文件的末尾,它才有效。
a3nm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.