2010-05-06 76 views
2

爲了查詢遠程數據庫,我們試圖使用paramiko模塊按需爲任意服務器創建SSH隧道。我們試圖使用paramiko提供的forward.py演示,但是最大的侷限在於,一旦套接字服務器啓動,關閉SSH隧道和SSH連接似乎並不是一個簡單的方法。以編程方式關閉Paramiko中的SSH隧道

我們的限制是我們無法從shell激活此操作,然後手動終止shell以停止列表器。我們需要打開SSH連接,隧道,通過隧道執行一些操作,關閉隧道,然後關閉python中的SSH連接。

我見過對server.shutdown()方法的引用,但不清楚如何正確實現它。

任何幫助將不勝感激......

回答

5

我不知道你所說的「正確實現它」是什麼意思 - 你只需要保持服務器對象的跟蹤和它叫shutdown當你想。在forward.py,服務器沒有保持跟蹤的,因爲forward_tunnel最後一行是

ForwardServer(('', local_port), SubHander).serve_forever() 

因此服務器對象是不容易到達了。但你可以改變,要,例如:

global theserver 
theserver = ForwardServer(('', local_port), SubHander) 
theserver.serve_forever() 

,並在一個單獨的線程運行forward_tunnel功能,使main功能得到控制回(而serve_forever在運行表示單獨的線程),並可以調用theserver.shutdown()只要這是適當和需要的。

+0

美麗!線程模塊以及使得ForwardServer可用的技巧。 – PlaidFan 2010-05-06 02:10:07

+0

所以在你創建一個運行ForwardServer的線程的方法中,你可以去thread.theserver.shutdown()嗎? – rexbelia 2017-05-24 21:47:24