きなこもち.net

.NET Framework × UiPath,Orchestrator × Azure × AWS × Angularなどの忘備録

多段SSH × ProxyCommand × Windows 10

Purpose

この記事は、OpenSSHを使ったsshの多段接続について、はまったことと解決策をまとめることを目的としている。

References

ProxyCommandによるsshの多段接続について
Windwos10でssh ProxyCommandの多段SSHの設定
OpenSSHのバグについて

きっかけ

社内のシステム開発において、アプリケーションをパブリッククラウドにデプロイする必要があった。デプロイ先には、セキュリティの関係で、踏み台サーバーを経由して接続する必要があった。Linux端末からの接続はできるが、Windows端末からの接続に関する手順が社内では公開されていなかったため、調べ始めた。

環境

利用端末:Windows 10 (1809)
Open SSH : 7.7.21
接続先OS:Ubuntu 18

Case1 : CreateProcessW failed error:2

エラーの内容

$home.ssh\configファイルの設定が完了し。openssh 7.7.21を使って多段SSHを実行したとき、以下のエラーが発生した。

CreateProcessW failed error:2
posix_spawn: No such file or directory

原因と対策

Windwos10でssh ProxyCommandの多段SSHの設定にもあるように。OpenSSHのバグであった。GithubのIssueのコメント欄にあるように、version 8.1のOpensshをマニュアルでインストールすることで解決できた。
ただ、会社のセキュリティ設定のせいで、手動でOpenSSHのコメントにあるようなEXEの置き換えができなかった。C:¥Windowsドライブ配下のEXE置き換えができなかったので、とりあえず別のフォルダにダウンロードしたEXE一式を格納して、絶対パスをつかってSSH.EXEを呼び出すようにした。エイリアスが使えないだけで、動くことは確認できた。

ProxyCommandについて

問題の内容

社内の状況に依存するところが多い話だが、ProxyCommandの設定に、SEDコマンドを使った文字列の操作処理が入っていたため、SEDを設定していないWindows環境ではProxyCommandの実行がうまく動かなかった。

対策

ProxyCommandの-Wオプションを設定する時、%h:%pを指定することで、踏み台サーバーで実行するSSHの接続先サーバーのホスト名:ポート番号を指定することができる。自分の場合はこの値を固定しても問題なかったので、SEDによる文字列操作をやめて、固定文字列で定義することで解決できた。

所感

まとめてみると、結構時間をつかった割にはやったことは少ないな・・・