Я пытаюсь написать небольшую программу 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 вывести или позже поставить блок catch
try
вокруг оператора connect
.
Моя проблема, однако, в том, что некоторые из систем, в которых я запускаю программу, имеют доступ через ключ RSA, который хранится в ~/.ssh
. И в этих случаях соединение просто преуспеет (чего я хочу избежать).
Итак, вот вопрос: кто-нибудь знает, как заставить 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 "Неизвестный сервер".
AutoAddPolicy
и аутентификацией по паролю, вы будете отправлять пароль прямо злоумышленнику.