私はヘッドレスリモートマシン(ubuntu)上で動作するアプリケーションを持っています。このアプリケーションにはlocalhost(ポート4068)で通信するAPIが含まれています。このマシンには、ポート22のsshで接続できます。sshを使用してリモートホストからlocalhost APIにアクセス
リモートマシンでPythonを直接使用すると、ソケットクライアントパッケージを使用してラインの私が何をしたい:私が欲しいもの
#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プログラムを持つことができましたが、これは
pxssh
経由でtelnetを使うよりも複雑です。また、私はパッケージ管理やその他のことをする必要があるので、私のソリューションは移植性がありません。私はあなたが私がここにニシキヘビhttp.server
を使用していますサーバー側で使用しているのか分からないので
これは美しいです、ありがとうございます!私はサーバー側でコントロールはありませんが、同じことをしています(「GET ...」ではなく「help」を送信する以外は同じです)。 – Wli
@Wli私はhttps://docs.python.org/3.6/library/telnetlib.htmlに行きます – uphill
いいえ、SSHTunnelForwarderは私が必要としていたものであり、気づいていないものです。私はtelnetを使いたくない、あまりにも面倒です。 – Wli