首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Python和SSH连接的开放端口进行TCP-IP通信

通过Python和SSH连接的开放端口进行TCP-IP通信
EN

Stack Overflow用户
提问于 2012-01-20 18:00:48
回答 2查看 3.2K关注 0票数 0

对于Python中基于TCP的通信来说,这是一个新问题。我正在尝试通过SSH隧道和Python套接字模块在两个*NIX系统之间建立基于TCP的通信。我使用了Python MOTW网站上的前两个示例"echo server“和"echo client”:http://www.doughellmann.com/PyMOTW/socket/tcp.html

通信在相同的*NIX系统(HOST1)上工作良好,但在ssh隧道上失败。

我用ssh -L 10000:HOST2:10000 USERNAME@HOST2登录了第二个*NIX系统。然后,我尝试以相同的方式建立通信,在HOST2上启动服务器的python脚本,在HOST1上启动客户端的脚本。这是我在stderr上得到的:

代码语言:javascript
复制
python test_socket_client.py 
connecting to localhost port 10000
Traceback (most recent call last):
File "test_socket_client.py", line 10, in <module>
sock.connect(server_address)
File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused

当我分别在HOST1和HOST2上启动服务器和客户端,反之亦然时,我得到了相同的消息。

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2012-01-20 19:21:22

您的服务器将其套接字绑定到localhost:10000 --这意味着它只侦听来自环回接口的连接。SSH命令行指示SSH将连接到端口10000的本地连接通过隧道传输到连接到HOST2:10000的连接。您的客户机Python程序连接到localhost:10000,然后SSH链接的远端尝试连接到HOST2:10000。尽管这与您的套接字绑定到的端口和机器相同,但它是一个不同的接口,您的套接字不会侦听它。

将SSH命令行更改为ssh -L 10000:localhost:10000 USERNAME@HOST2,或者将服务器的侦听套接字绑定到所有接口:server_address = ('', 10000)。空字符串用作INADDR_ANY。

当然,Gary van der Merwe所说的是对的:在HOST1上运行客户机Python程序时,需要运行SSH。

票数 1
EN

Stack Overflow用户

发布于 2012-01-20 19:13:44

我将检查您的服务器是否正在监听服务器主机,以及ssh客户机是否正在监听客户机主机。可以运行netstat -tnlp来检查这一点。

您确定在运行客户端时ssh客户端仍处于打开状态吗?您要么需要在一个终端上运行shh,而在另一个终端上运行您的客户机,要么运行ssh -Nf,这会导致ssh在通过身份验证后转到后台。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8939607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档