Python 使用sshtunnel包的两步SSH本地端口转发 我试图在HoST1和Hoest3之间打开一个双向隧道,其中中间的HES2。 host1 <--> host2 <--> host3
我有一个脚本在主机3上运行,正在监听端口51672。当我在主机1上创建TCP套接字并连接到主机2:51672时,我可以通过该套接字与主机3上的脚本通信 在下一步中,我将尝试将其移植到python中,并使用Python 使用sshtunnel包的两步SSH本地端口转发 我试图在HoST1和Hoest3之间打开一个双向隧道,其中中间的HES2。 host1 <--> host2 <--> host3,python,ssh,paramiko,portforwarding,ssh-tunnel,Python,Ssh,Paramiko,Portforwarding,Ssh Tunnel,我有一个脚本在主机3上运行,正在监听端口51672。当我在主机1上创建TCP套接字并连接到主机2:51672时,我可以通过该套接字与主机3上的脚本通信 在下一步中,我将尝试将其移植到python中,并使用sshtunnel包。我有点困惑,中的哪个选项与我的场景相同 这是我的第一次尝试: import paramiko import sshtunnel with sshtunnel.open_tunnel( ssh_address_or_host=(host2, 22),
sshtunnel
包。我有点困惑,中的哪个选项与我的场景相同
这是我的第一次尝试:
import paramiko
import sshtunnel
with sshtunnel.open_tunnel(
ssh_address_or_host=(host2, 22),
ssh_username=host2_username,
ssh_password=host2_pass,
local_bind_address=('0.0.0.0', 51672),
remote_bind_address=(host3, 22),
block_on_close=False
) as tunnel1:
log.info('Tunnel to host2 is established.')
with sshtunnel.open_tunnel(
ssh_address_or_host=('localhost', tunnel1.local_bind_port),
ssh_username=host3_username,
ssh_password=host3_password,
remote_bind_address=(host3, 51672),
block_on_close=False
) as tunnel2:
log.info('Tunnel to host3 is established.')
while True:
time.sleep(1)
我可以确认从host1到host2的隧道是打开的,因为下面的命令在host1上返回0
nc -z localhost 51672
但是,host2和host3之间的隧道似乎不起作用。第一步是隧道SSH。然后通过隧道传输自定义端口 更容易掌握的方法(尽管不是最佳方法)是:
- 打开到主机2的直接SSH连接
- 通过
连接将本地host2
端口转发到host1:a
host3:22
- 使用转发端口
打开到host1:A
的SSH连接host3
- 通过
将另一个本地host3
端口转发到host1:B
host3:51672
- 连接到
以访问host1:B
host3:51672
sock
方法,如中所示
(我认为,即使是您最初的ssh
方法也不必要地复杂,因为它有两个转发)
nc -z localhost 51672