Ubuntu 12.04 中的 ssh 配置在 14.04.4 上不起作用

Ubuntu 12.04 中的 ssh 配置在 14.04.4 上不起作用

我设置了一台新的 Ubuntu 14.04.4 服务器来替换 12.04 机器,但新服务器与旧的 ssh 配置存在问题。我可以在没有配置的情况下进行 ssh,甚至可以通过堡垒服务器从命令行进行 ssh,没有任何问题。例如,

ssh -o ProxyCommand="ssh -W %h:%p bastion.my.company.com" lab123.my.company.com

但是,如果我/home/myname/.ssh/config使用以下设置创建文件,则会遇到问题。

ServerAliveInterval 150
ServerAliveCountMax 6

ControlMaster auto
ControlPath /tmp/ssh_%h_%p_%r

Host *.my.company.com
User   myname
IdentityFile /home/myname/.ssh/mykey.pem
ProxyCommand ssh bastion -W %h:%p
ForwardAgent yes

Host bastion
Hostname        bastion.my.company.com
User            myname
IdentityFile    /home/myname/.ssh/mykey.pem

当我尝试使用 ssh 与上面的配置时,我得到数百个 ssh 进程,如下所示:

myname 29855 29854  0 12:24 pts/6    00:00:00 ssh bastion -W bastion.my.company.com:22
myname 29856 29855  0 12:24 pts/6    00:00:00 ssh bastion -W bastion.my.company.com:22
myname 29857 29856  0 12:24 pts/6    00:00:00 ssh bastion -W bastion.my.company.com:22
myname 29858 29857  0 12:24 pts/6    00:00:00 ssh bastion -W bastion.my.company.com:22

ssh只是挂起,直到我点击Ctrl+ C,然后所有 ssh 进程都会终止。

每个进程的最后几行的痕迹如下所示:

....
write(4, "SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2"..., 43) = 43
read(5, 0xbfe08efc, 1)                  = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} ---
+++ killed by SIGINT +++

进一步查看跟踪显示文件句柄来自以下内容:

...
socket(PF_LOCAL, SOCK_STREAM, 0)        = 3
connect(3, {sa_family=AF_LOCAL, sun_path="/tmp/ssh_bastion.my.company.com_22_myname"}, 57) = -1 ENOENT (No such file or directory)
close(3)                                = 0
pipe([3, 4])                            = 0
pipe([5, 6])                            = 0
..

看起来很奇怪,/tmp 中没有套接字文件,并且跟踪中没有绑定。

答案1

Steeldriver 在评论中提供了解决方案,他建议我从通配符主机匹配中排除 bastion.my.company.com。

例如,

ServerAliveInterval 150
ServerAliveCountMax 6

ControlMaster auto
ControlPath /tmp/ssh_%h_%p_%r

Host *.my.company.com !bastion.my.company.com
User   myname
IdentityFile /home/myname/.ssh/mykey.pem
ProxyCommand ssh bastion -W %h:%p
ForwardAgent yes

Host bastion
Hostname        bastion.my.company.com
User            myname
IdentityFile    /home/myname/.ssh/mykey.pem

答案2

ControlPath /tmp/ssh_%h_%p_%r

将控制套接字放入“公共可访问”状态是一个非常糟糕的主意/tmp。它应该位于某个安全目录中,其他用户无法访问该目录。

该行为看起来像是 的默认值已更改CanonicalizeHostname。该选项在您的系统中默认是什么?尝试禁用它:CanonicalizeHostname no

设置LogLevel DEBUG3对于调试问题也是一个很好的开始ssh。您可以在配置中设置此选项并发布日志吗?

相关内容