Paramiko:阅读SSH协议横幅时出错

Fun*_*ayu 46 python paramiko

最近,我根据paramiko制作了一个连接工作站的代码,其中包含不同的用户名(感谢私钥).

我从来没有遇到任何问题,但今天,我有: SSHException: Error reading SSH protocol banner

这很奇怪,因为它在任何连接上都是随机发生的.有没有办法解决它?

Tin*_*ane 25

这取决于你的意思是"修复".正如评论中指出的那样,根本原因是拥挤/缺乏资源.这样,它类似于一些HTTP代码.这是正常原因,可能是ssh服务器返回错误的头数据.

429太多请求,告诉客户端使用速率限制,或者如果超出配额,API有时会以类似的方式返回503.想法是,稍后再试,延迟.

您可以尝试在代码中处理此异常,稍等片刻,然后重试.您还可以编辑transport.py文件,将横幅超时设置为更高的值.如果您的应用程序无论服务器响应的速度无关紧要,您可以将其设置为60秒.


Gre*_*cki 13

添加到TinBane 的答案,建议编辑transport.py:您不必再这样做了。


自2015 年发布的Paramiko v. 1.15.0以来,(准确地说是这个 PR)您可以在创建 Paramiko 连接时配置该值,如下所示:

client = SSHClient()
client.connect('ssh.example.com', banner_timeout=200)
Run Code Online (Sandbox Code Playgroud)

在编写这些词时的当前版本的 Paramiko 中,v. 2.7.1,您可以在调用connect方法时配置另外 2 个超时,总共有这 3 个(来源):

  • banner_timeout - 等待 SSH 横幅出现的可选超时(以秒为单位)。
  • timeout - TCP 连接的可选超时(以秒为单位)
  • auth_timeout - 等待身份验证响应的可选超时(以秒为单位)。

  • 将所有三个设置为 60,但不到一秒就会生成错误。 (3认同)