2014-01-07 42 views
-1

過去幾天我一直和Paramiko一起工作,到目前爲止我很喜歡它,現在我遇到了一個問題,試圖將SSH陷入陷阱。我相信就是這樣,因爲我可以在另一臺服務器上運行相同的腳本,並且效果很好。基本上這個腳本會讓我ssh進入服務器並運行一個命令,但是當它到達stdout或stderr行時會掛起。然後我必須關閉終端窗口並重新打開,因爲它不會讓我CTRL + C脫身。有沒有其他人遇到這個問題,你是如何解決這個問題的。提前致謝!用SSH登錄的Paramiko問題

的paramiko腳本

import paramiko 
import getpass 

pw = getpass.getpass() 

client = paramiko.SSHClient() 
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
client.connect('example.com', username='usernam', password=pw) 
paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG) 
print "has connection." 
transport = client.get_transport() 
transport.set_keepalive(1) 

stdin, stdout, stderr = client.exec_command("foo") 

data = stdout.read() 
f = open('/Users/myMac/directory/foo.txt', 'w') 
f.write(data) 
f.close() 

client.close() 

我的日誌

has connection. 
DEBUG:paramiko.transport:[chan 1] Max packet in: 34816 bytes 
DEBUG:paramiko.transport:[chan 1] Max packet out: 4096 bytes 
INFO:paramiko.transport:Secsh channel 1 opened. 
DEBUG:paramiko.transport:[chan 1] Sesch channel 1 request ok 
DEBUG:paramiko.transport:Sending global request "[email protected]" 
DEBUG:paramiko.transport:Sending global request "[email protected]" 
DEBUG:paramiko.transport:Sending global request "[email protected]" 
DEBUG:paramiko.transport:Sending global request "[email protected]" 
DEBUG:paramiko.transport:Sending global request "[email protected]" 
DEBUG:paramiko.transport:Sending global request "[email protected]" 
DEBUG:paramiko.transport:Sending global request "[email protected]" 
.... 

,並保持下去,直到我關閉終端。

+0

感謝@vanda的:) – tjoenz

+0

我看不出這個問題是如何與SNMP(或特別是SNMP陷阱)相關的。 SNMP陷阱是一種網絡消息,被管理的設備可以發送給管理系統來通知發生的事件。 – Jolta

回答

0

我認爲這種行爲是由transport.set_keepalive(1)行造成的。它在1秒鐘的時間間隔後發送「Keepalive」數據包。如果是這樣的話,以下鏈接可能會有所幫助:
https://sourcegraph.com/github.com/paramiko/paramiko/symbols/python/paramiko/transport/Transport/set_keepalive

您的意思是「腳本在另一臺服務器上運行良好」是什麼意思?

+0

我同意創建無處不在的列表的Keepalive。如果我把它拿出來,它就會掛在同一個地方。 _「你的意思是什麼」腳本在另一臺服務器上效果很好「?」_我的意思是,如果我使用這個腳本來使用它的命令ssh進入另一臺服務器。我認爲這個問題與snmp有關。我現在正在使用Exscript來查看這是否可行。 – tjoenz