如何用Python/SSH实现远程TCP端口转发至本地并接收数据?
问题:远程TCP端口转发至本地未接收数据的配置缺失分析
部署架构与需求
设备持续尝试连接远程服务器的指定已知TCP端口,该远程服务器仅开放此TCP端口,无其他服务。需求是将远程服务器上的该端口转发至本地PC,并在本地启动TCP Server读取设备发送的数据。补充说明:在远程服务器直接启动TCP Server可正常接收设备数据,但需要通过本地控制连接转发。
现有尝试
- SSH命令方式:执行命令
ssh -N -R 10000:localhost:10000 username@hostname,同时在本地通过Python Socket或Hercules工具模拟TCP Server监听10000端口,但未收到任何数据。 - Python sshtunnel代码方式:编写如下代码但未生效:
from sshtunnel import SSHTunnelForwarder import socket SSH_SERVER = 'hostname' SSH_USERNAME = 'ubuntu' SSH_PASSWORD = 'password' PORT = 10_000 with SSHTunnelForwarder(ssh_address_or_host=SSH_SERVER, ssh_username=SSH_USERNAME, ssh_password=SSH_PASSWORD, remote_bind_address=('0.0.0.0', PORT), local_bind_address=('127.0.0.1', PORT), ) as server: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind(('127.0.0.1', PORT)) s.listen(1) conn, addr = s.accept() with conn: print(f"Connected by {addr}") data = conn.recv(128) print(data)
- 设备模拟器代码:为最小化验证,使用如下代码模拟设备发送数据:
import socket SSH_SERVER = 'hostname' PORT = 10_000 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((SSH_SERVER, PORT)) s.sendall(b"Hello, world")
期望在本地代码的print(data)中看到b"Hello, world"输出,请问缺少什么配置?
内容的提问来源于stack exchange,提问作者Rami Hassan
相关产品推荐
相关产品推荐

