SSH「ジャンプホスト」のどのようなバリエーションを使用する必要がありますか?

SSH「ジャンプホスト」のどのようなバリエーションを使用する必要がありますか?

sshjump_host私が知っている限り、次の接続に使用できる構成バリアントは少なくとも3つありますtarget_host

Host jump_host
  HostName 1.2.3.4

# Variant - 1
Host target_host
  HostName 172.16.0.1
  ProxyCommand ssh -q -x jump_host 'netcat %h 22'

# Variant - 2
Host target_host
  HostName 172.16.0.1
  ProxyCommand ssh -q -x jump_host -W '%h:22'

# Variant - 3
Host target_host
  HostName 172.16.0.1
  ProxyJump jump_host

この方法は他の方法よりも優れていますか?構成2と3の違い(ある場合)は何ですか?明らかに、構成1をnetcat準備する必要があるため、最も魅力的ではありません。

答え1

バリアント1は2回検証されます。プロキシコマンドを一度使用して接続を確立した後、元のsshコマンドを再利用してください。単にnetcat %h %pバリアント1を作成し、ホストパラメータを使用してsshコマンドで実行したいのと同じことを実行することもできます。

Host target_host
  HostName 172.16.0.1
  LogLevel QUIET
  ForwardX11 no
  ProxyCommand netcat %h %p

しかし、それでもnetcatをサポートするには、ptyと接続の一部として追加のプロセスが必要です。

バリアント2はnetcatと同じことを行いますが、内部的にはptyを割り当てずに、必要に応じてバリアント1とまったく同じように書き換えることができます。また、プロキシ転送などのホストのすべての設定がリダイレクトされるのを防ぎます。

バリアント1と2は、接続を自動的に確立する一般的な方法であるProxyCommandを使用します。これらのバリエーションは、主にProxyJumpがそれ以降に存在したために存在します。ただし、ProxyCommandを使用すると、接続設定を使用して高度な操作を実行できます。ドキュメントは、接続を転送するためにHTTP CONNECTプロキシを設定するためにそれを使用する例を示しています。

バリアント3はデフォルトで組み込みTCPプロキシであるProxyJumpを使用し、バリアント2に最も似ていますが、よりシンプルで制限的なリンクを可能にします。これがない場合は、同じことを行うと次のようになります。

Host jumphost2
  ProxyCommand ssh -W %h:%p jumphost1
Host server
  ProxyCommand ssh -W %h:%p jumphost2

しかし、ProxyJumpを使用すると、次のようになります。

Host server
  ProxyJump jumphost2,jumphost1

関連情報