【问题标题】:Max value of Paramiko SSH connection timeout?Paramiko SSH连接超时的最大值?
【发布时间】:2014-10-05 11:07:03
【问题描述】:

根据目前的经验,最大 Paramiko SSHClient 超时值约为 20 秒。是否有可能将其设置为 60 秒或更长时间?

这个连接设置让我在 20 秒后超时,即使它设置为 60 秒:

self.ssh = paramiko.SSHClient()
self.ssh.connect(self.cfg.ip, port=self.cfg.port, username=self.cfg.user, password=self.cfg.password, timeout=60)

【问题讨论】:

  • 您确定超时是由您的客户端引起的,而不是由服务器引起的吗?
  • 我收到此错误:[Errno 10060] 连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。但是现在我对这个超时的事情有点困惑。我需要在这里进行更多调查...

标签: python ssh timeout paramiko


【解决方案1】:

我认为您必须在内核级别进行设置。 Paramiko 通过socket.settimeout() 设置超时,并通过操作系统设置超时(我不确定,但你的情况似乎如此)。 Linux 将其超时设置为 20 秒 (read this)。在同一个链接中,他们解释了如何增加套接字超时:

我建议您将其设置为 6、7 或最多 8 的值。6 给出大约 45 秒的有效连接超时上限,7 给出大约 90 秒,8 给出大约 190 秒。

  # cat /proc/sys/net/ipv4/tcp_syn_retries 
  5
  # echo 6 > /proc/sys/net/ipv4/tcp_syn_retries 

或者使用 sysctl 命令:

  # sysctl net.ipv4.tcp_syn_retries
  net.ipv4.tcp_syn_retries = 5
  # sysctl -w net.ipv4.tcp_syn_retries=6
  net.ipv4.tcp_syn_retries = 6

要使此值在重新启动后保持不变,但您需要将其添加到 /etc/sysctl.conf

  net.ipv4.tcp_syn_retries = 6

【讨论】: