配置
- 本地: 一个本地机器将创建一个ssh连接并在远程盒子上发出命令。
- 代理: 具有对LOCAL和REMOTE的ssh访问权限的EC-2实例。
- 远程: 一个远程机器坐落在NAT路由器后面(LOCAL无法访问,但它将打开到PROXY的连接并允许LOCAL进行隧道连接)。
端口转发步骤(通过命令行)
- 创建一个SSH连接从REMOTE到PROXY,将REMOTE机器上22号端口的SSH流量转发到PROXY服务器上的8000号端口。
# 在REMOTE机器上运行
ssh -N -R 0.0.0.0:8000:localhost:22 PROXY_USER@PROXY_HOSTNAME - 创建一个SSH隧道从LOCAL到PROXY,并将LOCAL:1234的SSH流量转发到PROXY:8000(然后转发到REMOTE:22)。
# 在LOCAL机器上运行
ssh -L 1234:localhost:8000 PROXY_USER@PROXY_HOSTNAME - 创建一个从LOCAL到REMOTE(通过PROXY)的转发SSH连接。
# 在新的终端窗口中从LOCAL机器上运行
ssh -p 1234 REMOTE_USER@localhost# 现在我已经连接到REMOTE机器并可以运行命令了
Paramiko研究
我看了几篇关于使用 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')