使用zeromq在python中进行远程tcp连接

 BBCong 发布于 2023-01-18 19:34

我有一个python客户端需要与我管理的远程服务器通信.他们使用zeromq进行通信.当我在本地测试客户端/服务器时,一切正常.但现在我在云上部署了客户端和服务器,每个客户端都使用不同的提供商.我的问题是,建立连接的最简单方法是什么(安全)?我假设我无法通过密码,即使我可以猜测有更安全的替代方案.

我知道如何使用ssh-keygen设置没有密码的ssh连接.那会有用吗?在发送tcp req之前,客户端是否需要与服务器建立ssh连接?如果有一个python库可以帮助解决这个问题,那将是一个很大的帮助.

谢谢!

更新:超过24小时过去了,没有人回复/回答.我想我已经越来越接近解决这个问题了,但还没有完全解决这个问题.我将客户端的密钥添加到服务器上的.ssh/authorized_key,现在我可以在没有密码的情况下从客户端ssh到服务器.接下来,我关注了"使用SSH隧道化PyZMQ连接" 这篇文章.这是我在客户端代码中的内容:

1    context = zmq.Context()
2    socket = context.socket(zmq.REQ)
3    socket.connect("tcp://localhost:5555")
4    ssh.tunnel_connection(socket, "tcp://locahost:5555", "myuser@remote-server-ip:5555")
5    socket.send_string(some_string)
6    reply = socket.recv()

这不起作用.我真的不明白第3和第4行,我认为我在那里做错了.此外,我的服务器(托管在linode上)有一个"默认网关"IP和一个"公共IP" - 在隧道连接中我只指定了公共IP,这也是我用来ssh到机器的ip.

1 个回答
  • 的确,ZMQ方式是 - 与SSH的隧道连接.你的例子正是需要做的事情,除了一个应该使用connecttunnel_connection不是两者.

    此外,在指定要连接的服务器时,请确保定义SSH端口,而不是ZMQ REP套接字端口.也就是说,而不是myuser@remote-server-ip:5555你可能尝试myuser@remote-server-ipmyuser@remote-server-ip:22.

    import zmq
    import zmq.ssh
    context = zmq.Context()
    socket = context.socket(zmq.REQ)
    zmq.ssh.tunnel_connection(socket, "tcp://locahost:5555", "myuser@remote-server-ip")
    socket.send(b"Hello")
    reply = socket.recv()
    

    最后,确保你已经安装了pexpect或paramiko - 它们实际上会进行隧道连接.请注意,如果您使用的是Windows,那么paramiko是唯一可行的解​​决方案 - pexpect openssh隧道将无法在Windows上运行.

    如果你使用paramiko而不是pexpect,请确保paramiko=Truetunnel_connection参数中设置.

    2023-01-18 19:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有