在 Python 的 Paramiko 中强制进行密码验证(忽略 .ssh 文件夹中的密钥)

Force password authentication (ignore keys in .ssh folder) in Paramiko in Python

我正在尝试编写一个 Python 小程序来检查 SSH 服务器是否允许密码身份验证。这是当前计划:

import base64
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('ssh.example.com', username='strongbad', password='thecheat')
stdin, stdout, stderr = client.exec_command('ls')
for line in stdout:
    print('... ' + line.strip('\n'))
client.close()

想法是对输出进行 grep 或稍后在 connect 语句周围放置一个 try catch 块。

然而,我的问题是我 运行 程序所在的某些系统可以通过存储在 ~/.ssh 下的 RSA 密钥进行访问。在这些情况下,连接只会成功(我想避免)。

所以,问题来了:有人知道强制 Paramiko(或其他 SSH 客户端)使用密码的方法吗?

谢谢

SSHClient.connect 方法有 look_for_keys 个参数。将其设置为 False:

client.connect(
    'ssh.example.com', username='strongbad', password='thecheat',
    look_for_keys=False)

同样,您可能还想将 allow_agent 设置为 False


强制警告:不要使用AutoAddPolicy,除非你不关心安全。您正在以这种方式失去对 MITM 攻击的保护。
有关正确的解决方案,请参阅 Paramiko "Unknown Server"