我正在创建一个脚本,通过应用程序将多个文件上传到服务器。用户将能够选择多个文件,所有文件都将通过Python程序上传到服务器。我查看了可以用来连接服务器的SFTP python库并遇到了pysftp。我下载了最新版本并尝试使用以下脚本进行连接:
import tkinter.filedialog
import pysftp as sftp
def upload():
try:
s = sftp.Connection(host='host',username='username',password='password',port=portnumber)
localpath='C:/Python/Code/example.txt'
remotepath='/home/example'
s.put(localpath,remotepath)
s.close
except Exception as e:
print(str(e))
upload()
我跑了这个,却发现了一个我没有主机密钥的错误。我做了一些研究,发现你可以通过添加:
来关闭对主机密钥验证的需求cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
然后将原始行更改为:
s = sftp.Connection(host='hostip',username='username',password='password',port=portno, cnopts=cnopts)
因此它不需要主机密钥。这仍然有同样的错误(pysftp__init__.py:61:UserWarning:无法加载HostKeys)。我试着改变它大约一个小时,然后感到沮丧,并尝试了我以前避免的工作。我降级到之前版本的pysftp(pysftp == 0.2.8),不需要进行hostkey验证。我再次运行了以下代码:
import tkinter.filedialog
import pysftp as sftp
def upload():
try:
s = sftp.Connection(host='hostip',username='username',password='password',port=portno)
localpath='C:/Python/Code/example.txt'
remotepath='/home/test'
s.put(localpath,remotepath)
s.close
except Exception as e:
print(str(e))
upload()
仅出现以下错误: '失败'
我一直在尝试这几个小时。正如您可能已经猜到的那样,我对Python和一般编程都很陌生,所以我可能在某个地方犯了初学者错误。请注意,我可以通过Filezilla使用SFTP连接到我的服务器,并通过puTTY使用SSH(我只使用主机,端口,用户名和密码) - 所以没有问题。如果有人可以帮我解决这个问题(无论是使用最新版本的pysftp,旧版本还是完全不同的库,我都会非常感激。
答案 0 :(得分:1)
pysftp只是paramiko的一个包装器,用于抽象和简化sftp操作,如果你遇到pysftp问题,可以直接使用parmiko,因为paramiko是pysftp的依赖,你已经安装了它。
from paramiko import SSHClient
client = SSHClient()
client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy)
client.connect('hostname', user='user', password='password')
sftp = client.open_sftp()
sftp.put(localpath, remotepath)