構成
- LOCAL: ssh 接続を作成し、リモート ボックスでコマンドを発行するローカル マシン。
- PROXY: LOCAL と REMOTE の両方に ssh アクセスできる EC-2 インスタンス。
- REMOTE: NAT ルーターの背後にあるリモート マシン (LOCAL からはアクセスできませんが、PROXY への接続を開き、LOCAL がそれにトンネリングできるようにします)。
ポート フォワーディングの手順 (コマンド ライン経由)
REMOTE から PROXY への ssh 接続を作成して、REMOTE マシンのポート 22 の ssh トラフィックを PROXY サーバーのポート 8000 に転送します。
# リモート マシンから実行
ssh -N -R 0.0.0.0:8000:localhost:22 PROXY_USER@PROXY_HOSTNAMELOCAL から PROXY への ssh トンネルを作成し、ssh トラフィックを LOCAL:1234 から PROXY:8000 に転送します (その後、REMOTE:22 に転送します)。
# ローカル マシンから実行
ssh -L 1234:localhost:8000 PROXY_USER@PROXY_HOSTNAMELOCAL から REMOTE への転送された ssh 接続を (PROXY 経由で) 作成します。
# 新しいターミナル ウィンドウでローカル マシンから実行
ssh -p 1234 REMOTE_USER@localhost# これで REMOTE ボックスに ssh 接続し、コマンドを実行できるようになりました
パラミコリサーチ
Paramikoを使用したポート転送に関連するいくつかの質問を見てきましたが、この特定の状況に対処していないようです。
私の質問
Paramiko を使用して上記の手順 2 と 3 を実行するにはどうすればよいですか? 私は基本的に実行したいと思います:
import paramiko
# Create the tunnel connection
tunnel_cli = paramiko.SSHClient()
tunnel_cli.connect(PROXY_HOSTNAME, PROXY_PORT, PROXY_USER)
# Create the forwarded connection and issue commands from LOCAL on the REMOTE box
fwd_cli = paramiko.SSHClient()
fwd_cli.connect('localhost', LOCAL_PORT, REMOTE_USER)
fwd_cli.exec_command('pwd')