セキュリティの関係で、ある ssh サーバに接続して、そのあと別の ssh サーバに接続しなければならないことがよくあると思う。この途中の ssh サーバは、世間では「踏み台サーバ」と呼ばれているようだ。

-L で ローカルの 10022 番ポートに、踏み台サーバの 22 番をポートフォワードして、localhost の 10022 につなぐというような面倒なことをしていたのだが、つい最近、さすがに面倒やなあと思い調べていると、ssh に -J という超便利なオプションがあることに気づいた。私の環境は、mac(OpenSSH_7.9p1) と windows msys(OpenSSH_8.0p1)。

例えば、次のようにして使う。

ssh -J fumiuser@踏み台1 user@接続先サーバ
ssh -L 3389:接続先サーバのLAN内のwindowsIPアドレス:3389 -J fumiuser@踏み台1 user@接続先サーバ

鍵の指定の仕方はよくわからなかったが、ssh-agent / ssh-add で鍵を追加しておけばよい。多段に接続する場合は、-J にカンマ区切りで複数のユーザー名@ホストを指定することができる。

sftp を使う場合は -o オプションで指定することができる。(試していないが、~/.ssh/config で指定することもできるだろう。)

sftp -o ProxyJump=hogeuser@踏み台1 hogehogeuser@接続先サーバ

ファイル転送して、ssh ログインすることが多いだろうから、この形式も便利かと思う。

ああ、これでどこにでも乗り換えなしで行ける。つくづく、修行が足りないな、と思う。

-L、-R、-D、-J オプションを駆使してセキュアに構成されたネットワークに接続したいものだ。

ご参考までに。