OpenSSH 针对给定主机名禁用 ControlMaster

OpenSSH 针对给定主机名禁用 ControlMaster

我正在使用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[电子邮件保护]
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/[电子邮件保护]: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
调试1:匹配: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 none
debug1:kex:客户端->服务器aes128-ctr hmac-md5 none
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/[电子邮件保护]:22]
debug1:control_persist_detach:后台主进程
debug1:分叉到后台
debug1:进入交互式会话。
debug1:多路复用控制连接
调试1:通道1:新[mux-control]
调试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[电子邮件保护]回复 0
调试1:频道2:空闲:客户端会话,nchannels 3
调试1:通道1:空闲:多路复用控制,n通道2
与 droolit.unfuddle.com 的共享连接已关闭。
[andrey-mbp ~]$ ll /ms/
共 0
srw------- 1 akhkharu 管理员 0B 7月 17 11:55[电子邮件保护]:22

谢谢,
安德烈。

答案1

您的*主机节正在捕获它。请将更具体的主机节放在前面。

答案2

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

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

Host就我的情况而言,我发现使用时各部分的顺序Host *似乎无关紧要,但上述方法始终有效。

答案3

对于我来说,当我在节内另外ControlPath设置时它就起作用了。nonehost

您可以尝试:

Host *.unfuddle.com   
    ControlMaster no
    ControlPath none

那么就不会生成控制会话。

相关内容