Paramiko (Python 2.7)를 사용하여 다중 요소 인증 (username + password + one-time-password)을 사용하는 호스트에 연결하려고합니다. transport.auth_interactive 함수는 (문서에서 이해하고있는 것을 기반으로) 이것을 수행하는 방법 인 것처럼 보이지만 실행은 결코 그 시점에 이르지 못합니다. 인증은 client.connect 행에서 실패합니다.Python Paramiko (클라이언트) Multifactor 인증
뭔가 빠져있는 것 같습니다.
#!/usr/bin/env python
import paramiko
import getpass
import os
import logging
user = ""
pw = ""
mfa = ""
def inter_handler(title, instructions, prompt_list):
resp = []
for pr in prompt_list:
if pr[0].strip() == "Username:":
resp.append(user)
elif pr[0].strip() == "Password:":
resp.append(pw)
elif pr[0].strip() == "OTP Code:":
resp.append(mfa)
return tuple(resp)
#Main Entry Point
if __name__ == "__main__":
paramiko.util.log_to_file(os.path.expanduser('~/paramiko.log'), logging.DEBUG)
user = raw_input("Username: ")
pw = getpass.getpass("Password: ")
mfa = raw_input("OTP Code:")
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #Don't care about host keys
client.connect("mfahost.example.com", port=22, username=user, password=pw, look_for_keys=False)
client.get_transport().auth_interactive(user, inter_handler)
client.exec_command("touch ~/paramikotestfile")