在帕拉米科失去连接的时间超时

时间:2016-05-28 10:34:13

标签: python ssh paramiko

我需要在使用Paramiko通过SSH执行长时间运行的命令时正确处理连接问题。

exec_command有一个timeout参数,但如果没有响应则抛出异常。因此,当连接丢失时以及执行的命令工作时间超过timeout秒时,它会引发。

所以我尝试使用set_keepalive,但这也不起作用。 Paramiko不保证发送keepalive数据包,似乎它不会检查来自服务器的keepalive响应。我只想说:

iptables -A INPUT -s ... -j DROP

在命令中间的目标服务器上执行并观察Paramiko的调试日志 - 它只是保持发送keepalive数据包,并且在没有服务器响应时不会注意。因此,似乎没有类似于openssh ServerAliveCountMax param的内容,如果没有来自ssh服务器的客户端响应,则会杀死ssh。

我认为没有办法区分长时间运行命令和网络故障。我可以在timeout电话上加exec_command并相信如果出现异常,它不是一个慢命令而是连接丢失。

有没有可靠的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

两种情况都是网络故障,一种情况是它从一开始就没有工作,另一种是因为它以后失败了。最后,它们之间没有太大区别。

由您来决定代码在这种情况下的行为方式。通常的方法是通过插入不断增长的超时来重试。

最着名的算法称为Exponential backoff