OpenSSH のクライアントには、SSH クライアントとサーバー間のトンネル通信に使用される ProxyCommand オプションがあります。トンネル技術、またはプロキシ技術とも呼ばれるこの技術は、ネットワーク通信技術の一般的な概念であり、一つのチャネルを別のチャネルの上に構築することを意味します。
SSH セッションは TCP 接続に基づいていますが、接続の両端の出口(または入口)をキャプチャすることで、他のチャネルを使用して転送することができます。そして、SSH はまだ自分がもう一方の端と TCP 接続を使用していると考えています。
ProxyCommand は、SSH クライアントが標準入出力とこのコマンドを起動したプロセスを介して通常の SSH 通信を行うためのコマンド(プロキシ)を指定します。そして、Proxy は SSH サーバーに接続しています(通常はサーバープロキシであり、そのサーバープロキシがサーバーに接続しています)。
環境の説明
リモートサーバーのIPアドレスは0.0.0.1で、コード名はXです。
別のリモートサーバーのIPアドレスは0.0.0.2で、コード名はYです。
現在のマシンのIPアドレスは0.0.0.3で、コード名はAです。ローカルでSSHクライアントを使用してXとYにキーまたはパスワードで接続できます。
ここでは、すべてのアクセスに鍵を使用しています。マシン A と Y の間ではアクセスできません。
ローカルの
~/.ssh/config
の設定ファイルの情報は次のようになります。X に接続して Y に接続します。
Host X
HostName 0.0.0.1
User root
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_1
Host Y
HostName 0.0.0.2
User root
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_2
Host test
HostName 0.0.0.2
User root
Port 22
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh X -W %h:%p
マシン A から X を介して Y サーバーに接続するテスト
ssh test
注:
-W host:port
クライアントの標準入力と標準出力をセキュアチャネル上のホストのポートに転送するよう要求します。-N、-T、ExitOnForwardFailure、ClearAllForwardingsを暗黙的に指定しますが、これらは設定ファイルや-oコマンドラインオプションで上書きすることができます。
-W:このオプションはOpenSSH 5.4以降でサポートされています。公式のリリース情報を参照してください。
-Wを使用する前に、通常はncオプションを使用していました。ncはTCP/UDPパケットを指定された(代替)場所に転送することができ、基本的にはssh -Wと同じです。
参考:
openssh