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

Nor*_*ert 7 python ssh paramiko python-3.x

我正在尝试编写一个小型 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()
Run Code Online (Sandbox Code Playgroud)

这个想法是 grep 输出或稍后try catchconnect语句周围放置一个块。

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

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

谢谢

Mar*_*ryl 9

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

client.connect(
    'ssh.example.com', username='strongbad', password='thecheat', look_for_keys=False)
Run Code Online (Sandbox Code Playgroud)

同样你可能要设置allow_agentFalse为好。


强制性警告:不要使用AutoAddPolicy,除非您不关心安全性。这样你就失去了对 MITM 攻击的保护。
有关正确的解决方案,请参阅Paramiko“未知服务器”