Python 帕拉米科提出';身份验证异常';有时

Python 帕拉米科提出';身份验证异常';有时,python,python-3.x,paramiko,Python,Python 3.x,Paramiko,这是一种几乎不可能复制的罕见病例,但我见过20次中有4次发生这种情况 以下是我的开放式会话方法: def open_session: self.session = paramiko.SSHClient() self.host = host self.username = username self.password = password self.session.set_missing_host_key_policy(paramiko.AutoAddPo

这是一种几乎不可能复制的罕见病例,但我见过20次中有4次发生这种情况

以下是我的开放式会话方法:

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)
帕拉米科这样做的具体原因是什么?

应该是:

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())
加载系统主机密钥(文件名=无) 从系统(只读)文件加载主机密钥。使用此方法读取的主机密钥将不会通过save_Host_密钥保存回。

进一步调查后,发现这是机器本身的问题。我在最初的问题中提到的代码保持原样,在另一台更稳定的机器上连续工作了300次,没有失败。

我不完全理解它的功能,请解释一下好吗?当此方法未运行时,是否从用户的本地“已知主机”文件加载主机密钥?或者根本没有加载主机密钥?如果是后者,那么为什么认证大部分时间都通过了呢?阅读:你的答案和另一个答案几乎都是Paramiko文档中的复制粘贴。我读过但不明白,这就是为什么我要求进一步解释…现在测试。正如我所说,它有时会失败,因此可能需要一段时间才能失败。据我所知,windows机器上没有“已知主机”文件(我运行脚本的机器是windows机器),因此。。主机密钥根本没有加载吗?如果是这样的话,身份验证在大多数情况下是如何通过的,但有时会失败?更新:这个答案并没有解决我的问题。