SSH с 2FA в Python с использованием Paramiko - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь написать сценарий Python 3, который подключится к удаленному серверу через ssh и запустит команду, используя модуль paramiko.

Удаленный сервер использует факторную аутентификацию Duo 2 и предлагает вамвыберите режим аутентификации при подключении, используя ssh:

$ ssh myuser@remoteserver.com
Duo two-factor login for myuser

Enter a passcode or select one of the following options:

 1. Duo Push to +XXX XX-XXX-1111
 2. Phone call to +XXX XX-XXX-1111
 3. SMS passcodes to +XXX XX-XXX-1111

Passcode or option (1-3): 1
Success. Logging you in...

Когда я использую ssh в терминале, я просто нажимаю 1 и затем Enter, получаю push-сообщение на свой телефон, где я утверждаю соединение, а затем я 'm вошел в систему.

Я не смог сделать это в Python, к сожалению.Вот код, который я попытался использовать:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('remoteserver.com', port=22, username='myuser', password='mypassword')
stdin, stdout, stderr = ssh.exec_command('ls -l')
output = stdout.readlines()
print(output)

Если я попробую тот же код на удаленном сервере без 2FA, он будет работать, как и ожидалось, но на этом сервере я получаю ошибку authenticatino:

paramiko.ssh_exception.AuthenticationException: Authentication failed.

Любая помощь будет принята с благодарностью.

...