Paramiko 版本 - 2.7.2
Python 版本 - 3.5.10
操作系统 - Linux、CentOS Linux 7(核心)
**问题:** 使用 python,我们尝试连接到 SSH 服务器。它随机失败并出现“身份验证失败”错误。但有时它却能完美地发挥作用。当我们尝试从命令行通过 SSH 连接到服务器时,它连接正常。
注意:给出的主机名、用户名和密码是正确的。
下面是代码片段和回溯 -
**步骤:**
1.) 通过 crontab 以 15 分钟的间隔运行以下代码。
2.) 随机看到身份验证失败错误。
import paramiko
import traceback
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(hostname, 22, username, password)
ssh.close()
except Exception as ssherror:
traceback.print_exc()
Traceback (most recent call last):
File "sshToServer.py", line 15, in getCPUCount
ssh.connect(hostname, 22, username, password)
File "/home/user/env/lib/python3.5/site-packages/paramiko/client.py", line 446, in connect
passphrase,
File "/home/user/env/lib/python3.5/site-packages/paramiko/client.py", line 764, in \_auth
raise saved_exception
File "/home/user/env/lib/python3.5/site-packages/paramiko/client.py", line 751, in \_auth
self.\_transport.auth_password(username, password)
File "/home/user/env/lib/python3.5/site-packages/paramiko/transport.py", line 1509, in auth_password
return self.auth_handler.wait_for_response(my_event)
File "/home/user/env/lib/python3.5/site-packages/paramiko/auth_handler.py", line 250, in wait_for_response
raise e
paramiko.ssh_exception.AuthenticationException: Authentication failed.
您能帮助我们了解导致该问题的原因吗?
期望:需要无故障地连接到 SSH 服务器。
就 @Lewis 提出的观点而言,您的
try/except
块并不能保证连接得到正确清理,特别是如果您在 ssh.connect()
块中的 try
之后运行其他指令。
我建议从这里开始,将
ssh.close()
移动到 finally
块,这应该保证 SSH 会话正确关闭
try:
ssh.connect(hostname, 22, username, password)
except Exception as ssherror:
traceback.print_exc()
finally:
ssh.close()