我能够通过sftp进入SERVER1和SERVER2(上面已指定)。我可以使用命令行将ftp传输到SERVER1和SERVER2中,没问题。
但是,当我尝试使用python 3.7(pysftp)连接到SERVER2时,我又回来了
调试:paramiko.transport:正在尝试密码验证...
调试:paramiko.transport:userauth正常
DEBUG:paramiko.transport:不允许使用身份验证类型(密码)。
调试:paramiko.transport:允许的方法:['publickey','keyboard-interactive']
调试:paramiko.transport:userauth正常
INFO:paramiko.transport:身份验证(键盘交互)失败。
我不想使用命令行和python中的某些ETL进程运行提取,而是希望将所有内容保留在一个程序中-最好是python 3.7,并且不使用任何公钥/私钥。
有任何提示让paramiko / pysftp启动键盘交互功能吗?
import pysftp
import getpass
question = input ("Do you want to: A) Connect to SERVER1 B) Connect to SERVER2. [A/B]? : ")
# Decide whether SERVER 1 or SERVER 2
if question == "A":
hostname="SERVER1"
username='TESTUSER'
elif question == "B": # STILL CANNOT FIGURE OUT HOW TO PROPERLY CONNECT TO SIS SFTP
hostname="SERVER2"
username='###USER'
else:
print("Not permitted")
# Get security clearances, don't want to hardcode any passwords right now
tkpass = getpass.getpass("Password:")
# DEBUGGER HERE
import sys
import logging
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
# Make the connection to the server
srv = pysftp.Connection(host=hostname, username=username,
password=tkpass)
# Get the directory and file listing
data = srv.listdir()
# Closes the connection
srv.close()
# Prints out the directories and files, line by line
for i in data:
print(i)
答案 0 :(得分:0)
自1.5版以来,Paramiko将默认尝试键盘交互模式。文档(CodePen demo)状态:
从1.5开始,如果未传递任何事件且故障预置为True(默认值),则如果服务器不支持纯密码身份验证,但确实支持所谓的“键盘交互”模式,则将尝试进行身份验证使用此交互模式。
您会在输出中看到它实际上正在尝试键盘交互模式并失败:
INFO:paramiko.transport:身份验证(键盘交互)失败。
因此,我怀疑将用户名或密码传递给pysftp.Connection时出现问题。是用户名吗?您已经在###USER
上将其设置为SERVER2
。