Python Paramiko在SSH登录时出现问题

Python Paramiko在SSH登录时出现问题,python,ssh,paramiko,Python,Ssh,Paramiko,在过去的几天里,我一直在与Paramiko合作,到目前为止,我非常喜欢它,现在我遇到了一个问题,即试图将ssh引入snmp陷阱。我相信是这样的,因为我可以在另一台服务器上运行相同的脚本,而且效果非常好。基本上,脚本会让我使用ssh进入服务器并运行命令,但在到达stdout或stderr行时会挂起。然后我必须关闭终端窗口并重新打开,因为它不会让我按CTRL+C键离开。有没有其他人遇到过这个问题?您是如何解决的。提前谢谢 Paramiko脚本 import paramiko import getpa

在过去的几天里,我一直在与Paramiko合作,到目前为止,我非常喜欢它,现在我遇到了一个问题,即试图将ssh引入snmp陷阱。我相信是这样的,因为我可以在另一台服务器上运行相同的脚本,而且效果非常好。基本上,脚本会让我使用ssh进入服务器并运行命令,但在到达stdout或stderr行时会挂起。然后我必须关闭终端窗口并重新打开,因为它不会让我按CTRL+C键离开。有没有其他人遇到过这个问题?您是如何解决的。提前谢谢

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 "keepalive@example.com"
DEBUG:paramiko.transport:Sending global request "keepalive@example.com"
DEBUG:paramiko.transport:Sending global request "keepalive@example.com"
DEBUG:paramiko.transport:Sending global request "keepalive@example.com"
DEBUG:paramiko.transport:Sending global request "keepalive@example.com"
DEBUG:paramiko.transport:Sending global request "keepalive@example.com"
DEBUG:paramiko.transport:Sending global request "keepalive@example.com"
....

并一直运行直到我关闭终端。

我认为这种行为是由
传输引起的。设置keepalive(1)
行。它在1秒间隔后发送一个“keepalive”数据包。如果是这样,下面的链接可能会有所帮助:



“脚本在另一台服务器上运行良好”是什么意思?

谢谢@vanda:)我不知道这个问题与SNMP(特别是SNMP陷阱)有什么关系。SNMP陷阱是一种网络消息,受管设备可以将其发送到管理系统,以通知发生的事件。我同意,正是keepalive创建了neverending列表。如果我把它拿出来,它就挂在同一个地方。“你说的“脚本在另一台服务器上工作得很好”是什么意思?”“我的意思是,如果我用这个脚本通过一个命令ssh到另一台服务器上,它就会工作。我认为这个问题与snmp有关。我现在正在使用Exscript,看看这是否有效。