我有一个 ssh 配置文件,内容如下:
(a bunch of specific entries)
Host appserver.*.*.foo.in
ControlMaster no
Host *
ForwardAgent yes
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 300
不幸的是,如果我尝试通过类似
ssh [email protected] -p 2222
我收到一条关于控制路径太长的错误。这很令人困惑,因为我故意禁用了 ControlMaster,以避免在配置文件中更具体的 ssh 节中出现该问题。
为什么这个配置设置被忽略?
答案1
ControlMaster
控制ssh
实例是否为控件掌握,而不是它是否使用控制功能。ssh_config 手册页其中部分内容如下:
控制大师
...设置为“yes”时,ssh(1) 将使用 ControlPath 参数监听指定的控制套接字上的连接。其他会话可以使用相同的 ControlPath 连接到此套接字,并将 ControlMaster 设置为“no”(默认值)。这些会话将尝试重用主实例的网络连接,而不是启动新的连接,但如果控制套接字不存在或未监听,则会恢复正常连接。
换句话说,“ControlMaster no”仍然允许ssh
使用现有的控制套接字(如果存在)。因此它仍将解释ControlPath
并寻找控制套接字。
如果要禁用 ssh 实例的控制功能,请ControlPath
按照手册页中的说明将其设置为“none”。