在 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"。
我正在尝试编写一个 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"。