我有一个运行在无头远程机器(ubuntu)上的应用程序。此应用程序包含一个在本地主机上通信的API,端口4068.我可以通过端口22上的ssh连接到此机器。使用ssh从远程主机访问本地主机API
直接在远程机器上使用python,我可以使用sockets-client软件包并获取一对行什么,我想:
#From within remote machine!
import socket
s = socket.socket()
s.connect(("127.0.0.1",4068))
s.send("help")
print(s.recv(1024))
#prints the API help
我要的是通过与远程API(这实在是偏远,不在本地网络)通信做我的本地机器上的一些分析。
我到目前为止所做的是使用pxssh
并呼吁telnet
。我想这不是最佳的,肯定它不适合我。我更喜欢使用套接字客户端软件包或类似的替代方案。
这里是我的解决方案的示例代码
#From my local machine.
from pexpect import pxssh
import pexpect
#hostname, username and password are information to connect to ssh
p = pxssh.pxssh()
p.login(hostname,username,password)
query = r"telnet 127.0.0.1 4068"
p.sendline(query)
p.sendline("help")
p.expect("help")
p.expect([p.PROMPT,pexpect.EOF,pexpect.TIMEOUT])
print(p.before)
#prints the API help together with waste.
注:我知道我应该使用正则表达式的预期功能,然后打印匹配的字符串。无论哪种方式,与简单使用套接字客户端软件包相比,它并不优雅,也非常复杂。
其他解决方案我认为,但不太理想:
我当然可以重定向的API接口,以我的 开关/调制解调器的某个端口,但恐怕它会导致安全问题(我我不是 安全专家,实际上甚至不是IT员工)。我也可以写
我可以在远程计算机上使用我的python程序,但这似乎比使用telnet通过
pxssh
更复杂。另外它意味着我需要做包管理和whatnots,所以我的解决方案是不可移植的。
这是美丽的,谢谢!我在服务器端没有控制权,但它的工作原理是一样的(除了我发送“帮助”,而不是“GET ...”)。 – Wli
@Wli我会去为https://docs.python.org/3.6/library/telnetlib.html – uphill
不,SSHTunnelForwarder正是我所需要的,并没有意识到。我不喜欢使用telnet,太麻烦了。 – Wli