我正在尝试编写一个小的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输出或后来在try
声明周围放置catch
connect
块。
然而,我的问题是我运行程序的某些系统可以通过存储在~/.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"。