【问题标题】:Paramiko timing out despite constant activity尽管活动不断,Paramiko 仍会超时
【发布时间】:2022-01-07 00:00:04
【问题描述】:

我有一个脚本,它使用 Paramiko 通过 SSH 连接到服务器,并以每秒几次的顺序查询一些文件。有时它会崩溃并显示 TimeOut 错误消息,并且在运行时发生多长时间似乎没有明显的模式。当我尝试调试并寻找可能导致超时的活动中的潜在停顿时,我发现脚本似乎在以相当均匀的速率发送和接收消息,直到发生错误的那一刻,并且没有明显的异常在连接中断之前传递的消息。无论我通过初始连接使用什么超时参数,它似乎都会发生

我在这里遗漏了一些明显的东西可能会导致这种情况吗?不确定在这种情况下提供什么有用的示例代码,但如果需要,很乐意编辑更多细节。谢谢!!

编辑:

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(-credentials-)

while True:
    stdin, stdout, stderr = client.exec_command(command)
    data = stdin.readlines()
    print(data)

我的代码运行的那种循环的过度简化示例似乎在没有警告的情况下遇到超时错误

【问题讨论】:

  • 如果你需要帮助,你需要提供代码,你到目前为止所做的。我们无法猜测可能是什么问题。
  • 好吧,我的意思是,它有点独立于我正在做的事情 - 尽管活动没有暂停,但在某个时候连接会在循环中间关闭。我认为可能有一些已知的原因导致 Paramiko 中的连接过早关闭而不需要一些虚拟代码。但是我添加了一些代码的示例,它可以在 30 秒到 5 分钟的任何地方运行良好,然后突然失去连接
  • 那么您是否检查了服务器日志以找出原因(如果)它会关闭连接?

标签: python ssh paramiko


【解决方案1】:

您必须发送一个空数据包才能保持连接有效。 连接后添加client.get_transport().set_keepalive(60)

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(-credentials-)
# sends an empty packet to keep the connection alive for every 60 seconds 
client.get_transport().set_keepalive(60)

while True:
    stdin, stdout, stderr = client.exec_command(command)
    data = stdin.readlines()
    print(data)

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2012-06-30
    • 2021-05-25
    相关资源
    最近更新 更多