
3 ホップ SSH トンネル接続用に Putty を構成するにはどうすればよいでしょうか? 2 ホップ SSH トンネル接続用に Putty を構成する方法はわかっていますが、現在は 3 ホップで構成する方法を探しています。これを実現する手順を教えていただけますか?
2ホップの場合は、以下の方法に従います。
Windows 10 (Putty) --> Linux マシン1 (192.168.1.100) --> Linux マシン2 (192.168.1.150)
- セッション ウィンドウに、宛先アドレス (192.168.1.150) とポート 22 が指定されます。
- プロキシ オプションでは、中間サーバーの IP (192.168.1.100) とポート 22 を指定しました。
- また、telnet コマンドについては、次のとおりです。
plink -agent -l %user %proxyhost -nc %host:%port
上記の設定は 2 ホップでは正常に機能します。しかし、現在必要なのは 3 ホップの SSH トンネルです。現在の設定を変更して、さらに 1 ホップ追加するにはどうすればよいでしょうか。
答え1
Linux マシン 1/2 と同じネットワーク上の追加のマシンに接続したいだけなのか、それともそれらのマシンを超えて別のネットワーク (たとえば、172.22.1.x 上のマシン 4) に移動する必要があるのかは不明です。
Linuxマシン1/2と同じ192.168.1.xネットワーク上の別のマシンにアクセスしたいだけの場合は、実際のSSHトンネル(Putty のメニューにありますConnection -> SSH -> Tunnels
)。必要な数のマシンに複数のトンネルを設定できます。
実際に 3 番目のネットワークにアクセスしようとしている場合は、元の Putty インスタンスで定義されたトンネルを介して接続する別の Putty インスタンスを開くことができます。
- Puttyで、ローカルマシンのポート(たとえば2222)をLinuxマシン2のポート22に転送するトンネルを定義します。
- 次に、トンネルを使用する (つまり、Localhost:2222 に接続) Windows マシン上で別の Putty インスタンスを開き、追加のポート (たとえば、2223) を Machine4 のポート 22 (3 番目のホップ) に転送する新しいトンネルを定義します。
- Puttyのインスタンスをもう1つ開き、Localhost:2223に接続してMachine4にアクセスします。
私はこれまで 2 ホップでしかこれを実行したことがないので、どのように機能するかはわかりません。これは理想的な解決策ではありませんが、これが唯一の選択肢である場合は機能する可能性があります。
編集:Windows/Puttyに限定されていない場合は、これ(透過的マルチホップSSH)好きなようにできます。Windowsに限定されている場合は、シグウィンより柔軟な SSH ツールがいくつかある可能性があります。
答え2
PuTTY を使用したマルチホップ トンネル
PuTTY -> jHost1 (jIP1) -> jHost2 (jIP2) -> 宛先 (dIP)
素早い回答:
あなたのアプローチは正しいです。jHost2 への plink のローカル プロキシとして jHost1 への plink を使用するだけです。
plink user2@jHost2 -nc dIP:dPort -proxycmd "plink user1@jIP1 -loghost jHost1 -nc jIP2:jPort2"
さらに詳しい説明と注意事項:
-t
(両方のプリンクで)使用して、端末信号動作します(ジャンプホストでリモートシェルを呼び出さないため)があるプレーンテキストのパスワード(コマンドライン/PuTTY 設定で) がいつ
-l user -pw password
使用されるか (PuTTY プレースホルダー %proxypass を使用するかどうかは関係ありません)。- パスフレーズなしで秘密鍵を指定するために使用します
-i
(PuTTYでは標準I/Oが使用されるため、入力できません) - または
-agent
Pageantのキーを使用するために使用します - plinks はローカルで実行されるため、エージェント転送 (
-a
) は必要ありません。
- パスフレーズなしで秘密鍵を指定するために使用します
初めてコマンドラインから plinks を実行して、追加の質問がないかどうかを確認します。通常は、「受信パケットは復号時に文字化けしました「」エラーが発生する場合は、plink が jHost の SSH キーをインポートするように要求します。
jHost
との使い方に注意してくださいjIP
。jHost
論理ホスト名plink の "known_hosts" キー検索用 (Windows レジストリ内の PuTTY ストレージ)。jIP
現在のホップから次のホップの名前/IP にアクセスできます。(通常は、応答できない他のネットワークから接続していますjHost
。)jHost2
接続はプロキシ化されており、DNS ルックアップはまったく行われないため、外側の plink はそのまま使用できます。- 内部の plink は、ローカル キーの検索と次のホップへの NetCat のために
jIP1
、接続に を使用する必要があります。-loghost jHost1
-nc jIP2:jPort2
使用する必要がある場合TCP転送宛先 (許可されている必要があります) では、ジャンプ ホストがまったく存在しないかのように PuTTY で設定するだけです。これは、宛先への SSH 接続が jHost2 を介してトンネル化され、この接続が jHost1 を介してトンネル化され、ジャンプ ホストがトンネルを認識できないためです。
- ジャンプ ホストに ssh して再度 ssh を実行して宛先に到達するだけでなく、
<enter>~C<enter>
シーケンスを使用してジャンプ ホストの ssh クライアントにエスケープし、-L
/-R
コマンドを使用してトンネルを動的に追加する必要があります。
- ジャンプ ホストに ssh して再度 ssh を実行して宛先に到達するだけでなく、
TCP転送なし
plink -nc
(ssh -W
同等) は、ジャンプ ホスト経由で標準 I/O を TCP 転送するローカル プロキシです。ジャンプ ホストで TCP 転送を許可できない場合は、限定的な回避策として、プロキシ設定なしで SSH して「接続 -> SSH -> リモート コマンド」でjHost1
使用できます。ssh user2@jHost2 -t ssh user@Destination
この方法では、ジャンプ ホスト上で新しい SSH クライアントを起動します (キーが存在する必要があり、パスワードが再入力され、エージェントが転送され、構成/known_hosts が複製される必要があります...)。