從用Python編寫的HTTP RPC服務器啓動SSH隧道時,我遇到了麻煩。關於使用Python啓動SSH隧道的問題
有一個簡單的基於Python的BaseHTTPServer的Python編寫的HTTP RPC服務器。 作爲其中一項服務的一部分,我希望啓動從RPC服務器到遠程機器的SSH隧道。我以前使用os.system開始由RPC調用
os.system("ssh -f -n -N -L 127.0.0.1:%d:localhost:%d [email protected]%s" % (6800, 9000, "remote.machine"))
調用一見鍾情Python腳本的SSH隧道一切似乎如隧道開始,我可以用它來很好,但有一件事我注意到。除了在端口6800上偵聽外,SSH也開始偵聽端口8001(運行HTTP RPC服務器的端口)。
下面是關於RPC服務器和SSH lsof的輸出:
rpc.py 27763 usern 5u IPv4 102130428 TCP 127.0.0.1:8001 (LISTEN)
ssh 1951 usern 14u IPv4 102149728 TCP 127.0.0.1:6800 (LISTEN)
ssh 1951 usern 5u IPv4 102130428 TCP 127.0.0.1:8001 (LISTEN)
一切正常,直到RPC服務器的重啓。在重新啓動期間,RPC服務器被強制關閉與監聽套接字的連接,但SSH的連接保持打開狀態,並且RPC服務器無法再次在同一端口上啓動。
看來,SSH隧道也不知何故與RPC服務器的監聽套接字的FD本身相關聯。
任何人可以給出提示如何從腳本建立SSH隧道只假定端口(6800在這個例子中)上偵聽。
有沒有進展?如果他們提供狀態更新,我們通常會更好地幫助人們。 – ssokolow 2010-09-20 09:39:07