schedule2019-12-04

Windwos10でssh ProxyCommandの多段SSHの設定

Windwos10で~/.ssh/configProxyCommandを使って多段SSHの設定ができたので共有する。

作業環境

Windows10ではOpenSSHをインストールしてSSHコマンドが実行できるよう設定しています。 ローカル(Windows10)から踏み台(step-host)を経由して、目的のホスト(target-host)への接続を設定します。

また、step-hosttarget-hostには公開鍵を登録してます。 登録方法→ssh公開鍵認証設定まとめ - Qiita

多段SSHの設定

~/.ssh/configに以下の設定をします。

#踏み台
Host step-host
     HostName {step-hostのHostNmae}
     User hoge
     Port 22
     IdentityFile ~/.ssh/id_rsa 

#踏み台から接続するホスト
Host target-host
     HostName  {target-hostのHostNmae}
     User hoge
     Port 22
     IdentityFile ~/.ssh/id_rsa
     # Windows10のOpenSSH 7.xの場合
     ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -l %r -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null {step-hostのHostNmae}  -W %h:%p
     # MacやLinuxの場合
     # ProxyCommand ssh -l %r -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null {step-hostのHostNmae}  -W %h:%p

OpenSSH 8.0より前の場合、sshの絶対パスを指定する必要があります。環境に合わせて修正してください。

これでWindows10から多段SSHできるようになりました!

> ssh target-host

ProxyCommand ssh ○○としたときのエラー

Windows10でMac等のようにProxyCommand ssh ○○と設定していると以下のエラー出る。

>ssh user_name@target-host
CreateProcessW failed error:2
posix_spawn: No such file or directory

WindowsではProxyCommandには絶対パスでコマンドを指定する必要がある。

補足:OpenSSHのバグ

この問題はOpenSSHのバグでした。(OpenSSH 8.0以降では修正されているようです)
https://github.com/PowerShell/Win32-OpenSSH/issues/1172

こちらのコメントに手動で修正する方法が紹介されています。
https://github.com/microsoft/vscode-remote-release/issues/18#issuecomment-507258777

参考