Paramiko 无法连接到 SSH 服务器 - 尽管用户名和密码正确,但显示身份验证失败

问题描述 投票:0回答:1

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 服务器。

python paramiko
1个回答
0
投票

就 @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()
© www.soinside.com 2019 - 2024. All rights reserved.