我有一個運行在無頭遠程機器(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