環境
Windows端末
Windows10
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
VSCode Version 1.74.3
VSCode extension Remote - SSH v0.94.0
踏み台サーバー
Debian GNU/Linux 10 (buster)
~/.ssh/config
Host jumpserver
Host your.jumpserver.host
User youruser
port 22
IdentityFile yourpath/.ssh/id_rsa
PubkeyAuthentication yes
Host * !jumpserver
User youruser
port 22
ProxyCommand ssh -F yourpath/.ssh/config -W %h:%p jumpserver
- yourがつく部分を書き換えてください。
- IdentifyFileはIdentityFileとタイポしがちなので注意
- IdentiryFileのセパレーターは/でもかけます。configファイルを違うOSで使いまわすことは少ないと思いますがスラッシュで書く方が汎用性が高いと思われます。
スラッシュ:C:/yourpath/.ssh/id_rsa
バックスラッシュとダブルクオーテーション囲み:"C:\yourpath\.ssh\id_rsa"
-
Host * !jumpserver
はjumpserver以外のホストへの接続に以下の設定を適用することになります。github.comなどは外したいこともあると思うのでその場合はHost * !jumpserver !github.com
などとスペース空けで書けばOKです。 - ProxyCommandの部分は次のように
ProxyJump your.jumpserver.host
で書くこともできます。cmdやPowerShellからsshする場合はどちらでも特に問題ないです。ただ、pythonを利用してProxyJumpを書いたconfigでSSHしようとすると自動で補完されるProxyCommand内で-FオプションのパスがセパレーターなしになってしまうためProxyCommandで明示的に指定しています。
ProxyCommand("ssh -F yourpath.sshid_rsa config -W host:22 your.jumpserver.host")
returned nonzero exit status: ソケット以外のものに対して操作を実行しようとしました。
-
ProxyJump jumpserver
とするとハングしてしまったので、ここでは名前解決できる形式で記載する必要があります。
cmd, Powershellでのコマンド
ssh your.host.ip.or.hostname
シンプルにこれだけです。うまくいかない場合は-v
をつけてログを確認して進めると原因がわかりやすいです。
いろいろ試しているうちに:22
とポート番号を指定してコマンドを実行していたら以下のようなエラーが出てきました。
> ssh your.host.ip.or.hostname:22
channel 0: open failed: connect failed: Name or service not known
stdio forwarding failed
kex_exchange_identification: Connection closed by remote host
はまったポイントのメモ等
-
Permission denied (publickey).
のエラーはパスの指定ミスが原因でした。最後に/configや/id_rsaが抜けていたり、スラッシュやバックスラッシュに注意。 - VSCodeで設定するRemote SSHのConfig Fileはスラッシュ形式
C:/yourpath/.ssh/id_rsa
で書く必要があります。Windowsのエクスプローラーからコピペするとエラーが出てしまいます。 - Windowsではドット始まりでも隠しフォルダにはならない。
- portは指定ておく方が安心です。
- 今回は使いませんでしたがOpenSSHの公式ドキュメントによるとMatchを使ってもホストを指定できるようです。
以上です。SSHでてこずるとかなりストレスを感じると思うので誰かの助けになれば幸いです!