Я пытаюсь написать сценарий 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.
Любая помощь будет принята с благодарностью.