.ssh/configに関するブログをいくつか見てきましたが、proxycommand
次のコマンドの違いは何でしょうか
ProxyCommand ssh proxyserver -W [%h]:%p
ProxyCommand ssh proxyserver nc -q0 %h %p 2> /dev/null
ProxyCommand ssh proxyserver exec nc -q0 %h %p 2> /dev/null
これらのコマンドの一部は、一部のマシンでは機能しますが、他のマシンでは機能しません。
ベストアンサー1
私の理解はこうです:
ProxyCommand ssh proxyserver -W [%h]:%p
この
-W
オプションは OpenSSH の新しいバージョンに組み込まれているため、最小バージョン (ディストリビューションが機能をバックポートしていない限り 5.4。たとえば、RHEL6 OpenSSH 5.3p1 にはこの機能が含まれています) を搭載したマシンでのみ機能します。リリース ノートによると、次のようになります。http://www.openssh.com/txt/リリース-5.4ssh(1) に「netcat モード」を追加しました: "ssh -W host:port ..." これは、クライアントの stdio をサーバーの単一ポート転送に接続します。これにより、たとえば、ssh を ProxyCommand として使用して、中間サーバー経由で接続をルーティングできるようになります。
ProxyCommand ssh proxyserver nc -q0 %h %p 2> /dev/null
- オプションが利用可能になる前は、 (または netcat) ユーティリティ
-W
を使用していました。 を使用すると、TCP および UDP パケットを指定された (代替の) 場所に転送でき、基本的に と同じように動作します( をモデルにしています)。 このバリエーションが機能するには、中間ホストに がインストールされていること、およびホストの sshd_config でオプションが有効になっていることが必要です (デフォルト: yes)。のオプションはエラーを鎮静化するためのものです (はず) が、どのバージョンで導入されたのかわかりません。 (注:はおそらくエラーを鎮静化するためのものですが、代わりに を使用することもできます。)nc
nc
ssh -W
ssh -W
nc
nc
AllowTcpForwarding
-q0
nc
2> /dev/null
ssh
ssh -q
- オプションが利用可能になる前は、 (または netcat) ユーティリティ
ProxyCommand ssh proxyserver exec nc -q0 %h %p 2> /dev/null
これは、シェルの組み込み関数 を呼び出す点を除けば、2 番目のバリエーションとほとんど同じです。確信はありませんが、を
exec
含めるか除外するかに違いはないと思います。このバリエーションは、上記のバリエーションが機能するすべての場所で機能するはずです。たとえば、Bash マニュアルには次のように書かれています。exec
ProxyCommand
exec [-cl] [-a 名前] [コマンド [引数]]
command が指定されている場合は、それがシェルを置き換えます。新しいプロセスは作成されません。arguments は command の引数になります。-l オプションが指定されている場合は、シェルは command に渡される 0 番目の引数の先頭にダッシュを付けます。これは login(1) が行うことです。-c オプションは、command を空の環境で実行します。-a が指定されている場合は、シェルは実行される command に 0 番目の引数として name を渡します。何らかの理由で command を実行できない場合、シェル オプション execfail が有効になっていない限り、非対話型シェルは終了します。有効になっている場合は、失敗を返します。対話型シェルは、ファイルを実行できない場合は失敗を返します。command が指定されていない場合、リダイレクトは現在のシェルで有効になり、戻りステータスは 0 になります。リダイレクト エラーがある場合、戻りステータスは 1 になります。