Paramiko 有时加注 'AuthenticationException'

Paramiko raises 'AuthenticationException' sometimes

这是几乎不可能重现的罕见案例之一,但我已经看到它在 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 这样做有什么特别的原因吗?

应该是:

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(文件名=None) 从系统(只读)文件加载主机密钥。使用此方法读取的主机密钥不会被 save_host_keys 保存回来。 poaramiko

经进一步排查,原来是机器本身的问题。我最初的问题中提到的代码是好的,并且在另一台更稳定的机器上连续运行 300 次而没有失败。