ssh proxycommand -W、nc、exec ncの違いは何ですか?質問する

ssh proxycommand -W、nc、exec ncの違いは何ですか?質問する

.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

私の理解はこうです:


  1. ProxyCommand ssh proxyserver -W [%h]:%p

    • この-Wオプションは OpenSSH の新しいバージョンに組み込まれているため、最小バージョン (ディストリビューションが機能をバックポートしていない限り 5.4。たとえば、RHEL6 OpenSSH 5.3p1 にはこの機能が含まれています) を搭載したマシンでのみ機能します。リリース ノートによると、次のようになります。http://www.openssh.com/txt/リリース-5.4

      ssh(1) に「netcat モード」を追加しました: "ssh -W host:port ..." これは、クライアントの stdio をサーバーの単一ポート転送に接続します。これにより、たとえば、ssh を ProxyCommand として使用して、中間サーバー経由で接続をルーティングできるようになります。

  2. ProxyCommand ssh proxyserver nc -q0 %h %p 2> /dev/null

    • オプションが利用可能になる前は、 (または netcat) ユーティリティ-Wを使用していました。 を使用すると、TCP および UDP パケットを指定された (代替の) 場所に転送でき、基本的に と同じように動作します( をモデルにしています)。 このバリエーションが機能するには、中間ホストに がインストールされていること、およびホストの sshd_config でオプションが有効になっていることが必要です (デフォルト: yes)。のオプションはエラーを鎮静化するためのものです (はず) が、どのバージョンで導入されたのかわかりません。 (注:はおそらくエラーを鎮静化するためのものですが、代わりに を使用することもできます。)ncncssh -Wssh -WncncAllowTcpForwarding-q0nc2> /dev/nullsshssh -q
  3. ProxyCommand ssh proxyserver exec nc -q0 %h %p 2> /dev/null

    • これは、シェルの組み込み関数 を呼び出す点を除けば、2 番目のバリエーションとほとんど同じです。確信はありませんが、をexec含めるか除外するかに違いはないと思います。このバリエーションは、上記のバリエーションが機能するすべての場所で機能するはずです。たとえば、Bash マニュアルには次のように書かれています。execProxyCommand

      exec [-cl] [-a 名前] [コマンド [引数]]

      command が指定されている場合は、それがシェルを置き換えます。新しいプロセスは作成されません。arguments は command の引数になります。-l オプションが指定されている場合は、シェルは command に渡される 0 番目の引数の先頭にダッシュを付けます。これは login(1) が行うことです。-c オプションは、command を空の環境で実行します。-a が指定されている場合は、シェルは実行される command に 0 番目の引数として name を渡します。何らかの理由で command を実行できない場合、シェル オプション execfail が有効になっていない限り、非対話型シェルは終了します。有効になっている場合は、失敗を返します。対話型シェルは、ファイルを実行できない場合は失敗を返します。command が指定されていない場合、リダイレクトは現在のシェルで有効になり、戻りステータスは 0 になります。リダイレクト エラーがある場合、戻りステータスは 1 になります。

おすすめ記事