TL;DR
- 多段SSHする場合は
ProxyJump
コマンドで統一してOK - この用途において
ProxyCommand
オプションはもはや過去の産物 - 指示書やガイドなどを作成している場合は修正しましょう
多段SSHについてざっくり
インターネットからはアクセスできないLAN内のホストにSSHしたい場合に、LANとインターネットの両方に所属しているホスト(踏み台)を経由することで接続できます。踏み台には、ターゲットホスト同様OpenSSHサーバさえインストールされていればOKです。
さらに、自PC→インターネット→踏み台1→LAN1→踏み台2→LAN2→・・・→踏み台N→LAN N→ターゲット のように多段にすることもできます。
ProxyJumpオプションについて
OpenSSH 7.3から利用可能です。
ただしWindowsでは、バグのせいで8.0から利用可能です。
具体的には、
- Windows10→21H1から
- Ubuntu→17.04から
- macOS→10.12 Sierraから
- CentOS・RHEL→7から
です。POSIX系は2017年あたりから、今では腐敗臭のするバージョン(Ubuntu 18.04・CentOS/RHEL7)含めて対応していましたが、Windowsではつい最近まで対応していませんでした。
本来は20H2のタイミングで対応するはずでしたが、MSの人がOpenSSHの更新をサボっていたのでお預けになっていました。(どうしてもという人は、Chocolatey等を使って最新版を入れなければなりませんでした)
この度の21H1にて、OpenSSHが更新され、ついに他OSに追いつきました。
使い方は、以下のように、踏み台・ターゲットのホストへの接続設定を定義した後、ターゲット側の設定にProxyJump 【踏み台ホスト名】
を加えます。
Host 【踏み台ホスト名】
IdentityFile 【秘密鍵へのパス、他のオプションも同様に指定】
Host 【ターゲットのホスト名】
IdentityFile 【秘密鍵へのパス、他の一般オプションも同じように指定】
ProxyJump 【踏み台ホスト名】
コマンドでは、ssh 【ターゲット】 -J 【踏み台】
のように指定します。
従来の方法
従来はProxyCommand
オプションを使います。ProxyJump 【踏み台】
は、
ProxyCommand ssh -W %h:%p 【踏み台】
と同様です。コマンドでは専用のオプションがないため、
ssh -oProxyCommand='ssh -W %h:%p 【踏み台】' 【ターゲット】
と書かざるを得ませんでした。冗長ですね。ProxyCommand
は今後SSH以外の方法でSSH通信を中継しなければならない時だけに用途が縮小します。
指示書やガイドへの影響
SSHに詳しくない人のために説明を書く場合、従来はProxyCommand
を使った方法を最低でも併記しなければなりませんでした。
しかし、Windowsが公式対応したため、ProxyCommand
には触れず、ProxyJump
だけ書けばよくなりました。
指示書やガイドを管理している場合、ぜひとも修正しましょう。