質問: 現在ローカルから踏み台サーバーを経由してリモートサーバーへ2段階ssh port forwardingを行っています. 現在は以下のようにコマンドを直接,ローカル,踏み台サーバーへ打ち込んでいるのですが,configファイルに記述してローカルから一発でport forwardしたいのですが,方法がわかりません. ローカル→踏み台サーバー ssh -p 50000 -L 8888:localhost:12345 **user_a**@XXX.XXX.XXX.XXX(踏み台のip) 踏み台サーバー→リモートサーバー ssh -L 12345:localhost:8888 **user_b**@YYY.YYY.YYY.YYY(リモートのip) 方法をご存じの方お教えいただけると有難いです. よろしくお願いいたします.
回答: やりたいことは、**localhost:8888** → **YYY.YYY.YYY.YYY:8888** にポートフォワードしたいということでしょうか? 踏み台(XXX.XXX.XXX.XXX)から直接 YYY.YYY.YYY.YYY:8888 に接続できるようであれば、多段にしなくても、以下のコマンドでいいと思います。 ``` (localhost のみアクセスできればいいなら) [local]$ ssh -f -N -L 127.0.0.1:8888:YYY.YYY.YYY.YYY:8888 -p 50000 user_a@XXX.XXX.XXX.XXX (公開するなら) [local]$ ssh -f -N -L 0.0.0.0:8888:YYY.YYY.YYY.YYY:8888 -p 50000 user_a@XXX.XXX.XXX.XXX ※"-f -N" オプションを付けるとバックグラウンドで起動します。 停止する場合、kill コマンドを利用ください。 ``` リモートサーバーの 8888 番ポートが 127.0.0.1 しか LISTEN していないのであれば、多段にする必要があります。 まずは、`ProxyCommand` を使って、localhost → YYY.YYY.YYY.YYY に直接 SSH ログインできることを確認します。 ``` (~/.ssh/config) Host remote1 User user_b HostName YYY.YYY.YYY.YYY ProxyCommand ssh -W %h:%p -p 50000 user_a@XXX.XXX.XXX.XXX [local]$ ssh remote1 ※user_b@YYY.YYY.YYY.YYY にログインできることを確認 ``` 次に、ポートフォワードを試します。 上記コマンドに `-L` オプションを付けて、`ssh -f -N -L 127.0.0.1:8888:127.0.0.1:8888 remote1` としてもいいですし、config で `LocalForward` を設定してもいいです。 ``` (~/.ssh/config) Host portforward1 User user_b HostName YYY.YYY.YYY.YYY ProxyCommand ssh -W %h:%p -p 50000 user_a@XXX.XXX.XXX.XXX LocalForward 127.0.0.1:8888 127.0.0.1:8888 #LocalForward 0.0.0.0:8888 127.0.0.1:8888 [local]$ ssh -f -N portforward1 ※localhost:8888 → YYY.YYY.YYY.YYY:8888 にポートフォワードされることを確認 ``` なお、ssh のポート番号は、踏み台(XXX.XXX.XXX.XXX)は 50000、リモートサーバー(YYY.YYY.YYY.YYY) は 22 と想定しています。