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 次而没有失败。
这是几乎不可能重现的罕见案例之一,但我已经看到它在 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 次而没有失败。