SSH トンネル (ポート転送) と SSH ProxyJump、この特定のケースではどちらを使用すべきか、Me -> JumpSever -> TargetServer

SSH トンネル (ポート転送) と SSH ProxyJump、この特定のケースではどちらを使用すべきか、Me -> JumpSever -> TargetServer

私はSSHトンネルを初めて使いますが、OpenSSH プロキシのウィキブック何度も繰り返しますが、まだ混乱しています。

目標は、SSH トンネル (ポート転送) または ProxyJump (何と呼ぶべきかよくわかりません) のみを使用した二重プロキシを構築することです。

たとえば、me 192.168.1.1-->connect to--> とするthe Jump ServerA 1.1.1.1と、実際には に到達しますがthe Target ServerB 2.2.2.2、 でSOCKS5プロキシを設定するとServerA 1.1.1.1、最終的には によってプロキシされます。ServerB's IP 2.2.2.2

私は対処法を知っているme >-から-> Server A、でもどう対処したらいいのか分からないServer A >-から-> Server B(つまり、私はこれらのサーバーのすべてのアクセス権とルート権限を持っていますが、設定方法がわかりません。)

私は学習が遅いので、何かアイデアがあれば本当にありがたいです。

(この例の正確なコマンドやアプローチを投稿していただいても構いません。非常に役立ちます)

答え1

基本的な要件は次のとおりです。

  • ServerB は ServerA からのみアクセス可能である必要があります。直接接続しないでください。
  • ServerA では TCP トンネリングを有効にする必要があります。
  • ServerA はユーザーからアクセス可能である必要があります。

ジャンプホストを介して ServerB への接続を設定します ( .ssh/config)。

Host ServerB
    ProxyJump ServerA

これは、 を入力するとssh ServerAServerA に行き着き、ServerA にいるときに を入力するとssh ServerBServerB に行くことを前提としています。たとえば、「ServerB」という名前は ServerA で解決可能である必要がありますが、自分の側で解決可能であるかどうかは関係ありません。これらはホスト名または「スラッグ」(ニックネーム) である可能性があります。後者の場合、 でホスト名または IP アドレスを再度関連付けます.ssh/config

Host ServerA
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

プロキシ ホストに使用するユーザー名を指定することもできます。

Host ServerA
    User proxyuser
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

その後、 と入力しますssh ServerB。OpenSSH は ServerA に接続し、ランダムなポートを使用して、この接続を介して ServerB のアドレス (ポート 22) に転送します。この接続はバックグラウンドに分岐され、OpenSSH はすぐにこのランダムに転送されたポート (localhost に接続しますが、実際には、.ssh/known_hostsHostName で指定された名前 "ServerB" と IP アドレス (存在する場合) に対してキーをチェックします) に接続します。そのため、直接 ServerB に接続されます。"who" を発行すると、ServerA アドレスから接続していると表示されます。あなたと ServerA の間にいる人は、あなたが実際に ServerB と通信していることを知る方法がありません。

SSHコマンドラインオプションはどれでも使用できます。サーバーB接続 (転送されたポート経由で行われます)。たとえば、 を使用するとssh -D 12345 user@ServerB、ポートが ServerB:22 に転送されたプロキシユーザーとして ServerA に接続し、そのポートに接続してユーザーとして ServerB に認証し、ポート 12345 に SOCKS5 プロキシをインストールします。その SOCKS5 の終了アドレスは ServerB になります。たとえば、そのプロキシを使用すると (ブラウザーなどで)、リモート側では ServerB のアドレスから接続していることがわかります。

ジャンプホストをさらに積み重ねることもできます。これも機能します:

Host ServerB
    ProxyJump ServerA

Host ServerC
    ProxyJump ServerC

まず、ssh ServerCServerB:22 へのポート転送で ServerA に接続し、次にその転送を介して ServerB に接続し、別のポート転送で ServerC に接続し、さらにその別のポートに接続すると、ServerC シェルに接続されます。

パスワードの入力を求められるので注意してくださいそれぞれ接続。これはかなり面倒です。キーベースの認証を設定して使用する方がよいでしょうssh-agent

関連情報