12.04 システムを交換するために新しい Ubuntu 14.04.4 サーバーをセットアップしましたが、新しいサーバーで古い SSH 構成に問題があります。構成なしでSSHを使用でき、コマンドラインからBaschenサーバーを介して問題なく接続できます。例えば、
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
。設定でこのオプションを設定してログを公開できますか?