如何使用pysftp/paramiko在python中启用键盘交互身份验证?

如何使用pysftp/paramiko在python中启用键盘交互身份验证?,python,sftp,paramiko,pysftp,Python,Sftp,Paramiko,Pysftp,我能够将sftp转换到SERVER1和SERVER2(如上所述)。我可以使用命令行将sftp转换到SERVER1和SERVER2,没有问题 然而,当我尝试使用Python3.7(PySTFP)连接到SERVER2时,我得到了回报 调试:paramiko.transport:正在尝试密码验证 调试:paramiko.transport:userauth正常 调试:paramiko.transport:不允许使用身份验证类型(密码) 调试:paramiko.transport:允许的方法:['pub

我能够将sftp转换到SERVER1和SERVER2(如上所述)。我可以使用命令行将sftp转换到SERVER1和SERVER2,没有问题

然而,当我尝试使用Python3.7(PySTFP)连接到SERVER2时,我得到了回报

调试:paramiko.transport:正在尝试密码验证

调试:paramiko.transport:userauth正常

调试:paramiko.transport:不允许使用身份验证类型(密码)

调试:paramiko.transport:允许的方法:['publickey','keyboard interactive']

调试:paramiko.transport:userauth正常

信息:paramiko。传输:身份验证(键盘交互)失败

我不想使用命令行和python中的一些ETL进程运行提取,而是希望将所有内容都保存在一个程序中—最好是python 3.7,并且不使用任何公钥/私钥

让paramiko/PySFP启动键盘交互有什么提示吗

导入pysftp
导入getpass
问题=输入(“是否要:A)连接到服务器1 B)连接到服务器2。[A/B]?:”)
#决定是服务器1还是服务器2
如果问题==“A”:
hostname=“SERVER1”
username='TESTUSER'
elif question==“B”:#仍然无法确定如何正确连接到SIS SFTP
hostname=“SERVER2”
用户名='###用户'
其他:
打印(“不允许”)
#获得安全许可,现在不想硬编码任何密码
tkpass=getpass.getpass(“密码:”)
#调试器在这里
导入系统
导入日志记录
logging.basicConfig(stream=sys.stderr,level=logging.DEBUG)
#建立到服务器的连接
srv=pysftp.Connection(主机名=主机名,用户名=用户名,
密码=tkpass)
#获取目录和文件列表
data=srv.listdir()
#关闭连接
srv.close()
#逐行打印目录和文件
对于数据中的i:

打印(i)
Paramiko,因为1.5版默认情况下将尝试键盘交互模式。文件()指出:

从1.5开始,如果未传递任何事件且回退为真(默认),如果服务器不支持普通密码身份验证,但支持所谓的“键盘交互”模式,则将尝试使用此交互模式进行身份验证

您可以在输出中看到,它实际上正在尝试键盘交互模式,但失败了:

信息:paramiko。传输:身份验证(键盘交互)失败


所以我怀疑传递给pysftp.Connection的用户名或密码有问题。是用户名吗?在
SERVER2

上,您已将其设置为
####USER
,所以您的“键盘交互”身份验证只需要一个简单的密码?没什么特别的吗?是的,键盘交互只需要一个简单的密码。因此,为什么我可以在cmd行(sftp)中这样做,但奇怪的是不能使用pysftp您使用的是什么版本的Paramiko和pysftp?+向我们展示
ssh-vvvuser@host
输出。