複数のホップにわたって ssh コマンドを連鎖させるにはどうすればよいでしょうか?

複数のホップにわたって ssh コマンドを連鎖させるにはどうすればよいでしょうか?

各接続を SSH ホストとして指定して、複数の SSH 接続を連鎖させることは可能ですか?

-Wフラグを使用したり、別のホスト名またはIPアドレスへの2回目のホップを実行したりできることは知っていますnc(例:複数のホスト経由の ssh)。いくつかの理由から、これを希望どおりに動作させることができませんでした。まず、2 番目のホップでは、中間ホストに保存されているキー ファイルを使用したいのですが、 または のどちらでもこれを指定する方法がわかりません-Wnc次に、最終宛先には可変 IP アドレスがあります。これに対処するために、宛先でその IP アドレスを中間ホストに保存されているファイルに書き込むスクリプトを実行し、次にlook_up_ip.sh中間ホストでこの IP アドレスを出力するスクリプト ( ) を実行します。中間ホストでは、 に次のエントリがあります~/.ssh/config

Host destination
 HostName destination
 User dest_user
 IdentityFile ~/.ssh/destination
 PreferredAuthentications publickey
 ProxyCommand nc $(look_up_ip.sh %h) %p

これにより、中間から宛先への接続が だけで可能になりますssh destination

私がやりたいのは、~/.ssh/config最初のマシンに宛先ホストを定義する何か(たとえばhopped_destination)を入れて、ssh が最初に中間ホストに接続し、ssh destinationそこから を実行するようにすることです。そうすれば、ssh hopped_destination最初のマシンから を実行し、中間マシン~/.ssh/configで宛先の ID ファイルと IP 検索を処理できます。これを実行する理由の 1 つは、最終的には を使用して VNC で宛先に接続できるようにしたいのですvncviewer -via destination localhost:0が、中間ホスト上の他のユーザーが接続にアクセスできないようにしたいからです(この質問に対する受け入れられた回答の一部に暗示されているように:https://superuser.com/questions/96489/an-ssh-tunnel-via-multiple-hops)。最初のマシンに次のようなコマンドsshを入力できるのではないかと期待していました。ProxyCommand

Host destination
 ProxyCommand ssh -t intermediate_user@intermediate_host ssh destination

しかし、このようなことを実行できるオプションは見つかりませんでした。

また、これを実行するためのより良い方法についての提案も歓迎します (nc ProxyCommand現在使用しているものを削除する方法はありますか?)。おそらく、VNC コマンドをより直接的に実行するスクリプトを作成することもできますが、それはより複雑になる可能性があります (ポート転送を直接処理し、終了時にすべてを閉じるようにし、すべてのユーザーに対してポートを開かないようにする必要があります)。

答え1

私の ssh 設定ファイルからの例。

Host vmike2-squid-cache
  User mike
  ProxyCommand ssh -q -A -x ???.???.???.??? -W %h:22

(変更したのは IP だけです)

関連情報