【问题标题】:Paramiko raises 'AuthenticationException' sometimesParamiko 有时会引发“AuthenticationException”
【发布时间】:2016-05-01 14:32:07
【问题描述】:

这是几乎不可能重现的罕见情况之一,但我已经看到它在 20 次中发生了 4 次。

这是我的 open_session 方法:

def open_session:
    self.session = paramiko.SSHClient()
    self.host = host
    self.username = username
    self.password = password

    self.session.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    try:
        self.session.connect(self.host, username=self.username, port=port, password=self.password, timeout=self.connect_timeout)
    except paramiko.ssh_exception.BadHostKeyException:
        message = "host key could not be verified"
        self.sys_conf.logger.warning(message)
        raise BadCredentials(message)
    except paramiko.ssh_exception.AuthenticationException:
        message = "authentication failed."
        self.sys_conf.logger.warning(message)
        raise BadCredentials(message)
    except (paramiko.ssh_exception.SSHException, socket.error) as e:
        message = "could not establish connection, an error occurred: {}".format(e)
        self.sys_conf.logger.warning(message)
        raise ConnectionFail(message)
    except socket.timeout:
        message = "could not establish connection, time's out!"
        self.sys_conf.logger.warning(message)
        raise ConnectionFail(message)

Paramiko 这样做有什么特别的原因吗?

【问题讨论】:

    标签: python python-3.x paramiko


    【解决方案1】:

    应该是:

    self.session = paramiko.SSHClient()
    self.host = host
    self.username = username
    self.password = password
    self.session.load_system_host_keys() # u missed this
    self.session.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    

    load_system_host_keys(文件名=无) 从系统(只读)文件加载主机密钥。使用此方法读取的主机密钥不会被 save_host_keys 保存回来。 poaramiko

    【讨论】:

    • 我没有完全理解它的作用,你能解释一下吗?不运行此方法时,是否从用户的本地“已知主机”文件加载主机密钥?或者根本没有加载主机密钥?如果是后者,那为什么大部分时间认证都通过了?
    • 您的答案和其他 SO 答案几乎都是来自 Paramiko 文档的复制粘贴。我读过但不明白,这就是我要求进一步解释的原因..
    • 现在测试。正如我所说,它有时会失败某些,因此可能需要一段时间才能失败。据我了解,Windows机器上没有“已知主机”文件(我运行脚本的机器是Windows机器),所以..主机密钥根本没有加载吗?如果是这样,身份验证如何大部分时间通过但有时失败?
    • 更新:这个答案没有解决我的问题。
    【解决方案2】:

    经过进一步调查,事实证明这是机器本身的问题。我最初的问题中提到的代码原样良好,并且在另一台更稳定的机器上连续运行了 300 次而没有失败。

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2011-10-13
      • 2012-06-27
      • 2020-04-26
      相关资源
      最近更新 更多