当前位置: 首页 > 知识库问答 >
问题:

最新的SFTP python包和最佳实践

卓学智
2023-03-14

我一直在寻找SFTP python包,ftpretty对我来说很好:https://pypi.org/project/ftpretty/但我想使用更html" target="_blank">安全的协议。

PYSTFP显然有点过时(编辑:PYSTFP似乎仍在频繁使用,有关错误,请参见下文):https://bitbucket.org/dundeemt/pysftp/src/master/

并抛给我几个错误Win10,PyCharm,Python3.6:

C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\pysftp\__init__.py:61: UserWarning: Failed to load HostKeys from C:\Users\bobin\.ssh\known_hosts.  You will need to explicitly load HostKeys (cnopts.hostkeys.load(filename)) or disableHostKey checking (cnopts.hostkeys = None).
  warnings.warn(wmsg, UserWarning)
Traceback (most recent call last):
  File "C:/Users/bobin/PycharmProjects/classtest/pysftptest.py", line 7, in <module>
    with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword) as sftp:
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\pysftp\__init__.py", line 132, in __init__
    self._tconnect['hostkey'] = self._cnopts.get_hostkey(host)
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\pysftp\__init__.py", line 71, in get_hostkey
    raise SSHException("No hostkey for host %s found." % host)
paramiko.ssh_exception.SSHException: No hostkey for host s233.goserver.host found.
Exception ignored in: <bound method Connection.__del__ of <pysftp.Connection object at 0x00000235B0695048>>
Traceback (most recent call last):
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\pysftp\__init__.py", line 1013, in __del__
    self.close()
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\pysftp\__init__.py", line 784, in close
    if self._sftp_live:
AttributeError: 'Connection' object has no attribute '_sftp_live'

Process finished with exit code 1

这个线程似乎与我有关,但它已经有12年的历史了:Python中的SFTP?(独立于平台)并且paramiko软件包也会抛出错误:

Traceback (most recent call last):
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\paramiko\sftp_client.py", line 130, in __init__
    server_version = self._send_version()
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\paramiko\sftp.py", line 134, in _send_version
    t, data = self._read_packet()
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\paramiko\sftp.py", line 201, in _read_packet
    x = self._read_all(4)
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\paramiko\sftp.py", line 188, in _read_all
    raise EOFError()
EOFError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/bobin/PycharmProjects/classtest/paramikotest.py", line 12, in <module>
    sftp = paramiko.SFTPClient.from_transport(transport)
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\paramiko\sftp_client.py", line 170, in from_transport
    return cls(chan)
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\paramiko\sftp_client.py", line 132, in __init__
    raise SSHException("EOF during negotiation")
paramiko.ssh_exception.SSHException: EOF during negotiation

Process finished with exit code 1

到目前为止,我已经了解到,我可能需要一个密钥文件,我可以首先使用filezilla连接到我的Web空间,例如:如何从filezilla FTP客户端的密钥缓存中提取SFTP SSH密钥

我的问题是:如何与我的主机webgo建立SFTP连接:https://www.webgo.de/hilfe/content/76/52/de/was-ist-sftp.html

编辑:不提供主机密钥,如下所示:

import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

myHostname = "host"
myUsername = "user"
myPassword = "pass"


with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword, cnopts=cnopts, port=22) as sftp:
    print("Connection succesfully stablished ... ")
    sftp.put('C:\TEMP\Capture.PNG', preserve_mtime=True)

由于未提供主机密钥,仍然向我抛出一个错误:

C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\pysftp\__init__.py:61: UserWarning: Failed to load HostKeys from C:\Users\bobin\.ssh\known_hosts.  You will need to explicitly load HostKeys (cnopts.hostkeys.load(filename)) or disableHostKey checking (cnopts.hostkeys = None).
  warnings.warn(wmsg, UserWarning)

EDIT2:已尝试prettyftp,但我的提供商拒绝连接:

Traceback (most recent call last):
  File "C:/Users/bobin/PycharmProjects/classtest/testftp.py", line 15, in <module>
    f.put('C:\TEMP\Capture.PNG', 'Capture230.PNG')
  File "C:\Users\bobin\PycharmProjects\classtest\venv\lib\site-packages\ftpretty.py", line 119, in put
    self.conn.storbinary('STOR %s' % remote_file, local_file)
  File "C:\Users\bobin\AppData\Local\Programs\Python\Python36\lib\ftplib.py", line 513, in storbinary
    return self.voidresp()
  File "C:\Users\bobin\AppData\Local\Programs\Python\Python36\lib\ftplib.py", line 249, in voidresp
    resp = self.getresp()
  File "C:\Users\bobin\AppData\Local\Programs\Python\Python36\lib\ftplib.py", line 242, in getresp
    raise error_temp(resp)
ftplib.error_temp: 425 Unable to build data connection: Operation not permitted

使用了以下代码段,再次设置secure=False:

from ftpretty import ftpretty

# Minimal
f = ftpretty('host','user','pass', port=21, secure=True)
f.put('C:\TEMP\Capture.PNG', 'Capture230.PNG')
f.close()

共有1个答案

宋伟泽
2023-03-14

对于第一个错误,它似乎是pysftp中的一个bug。

您可以查看第76行中的Connection类,并且属性_sftp_live在第134行中定义,因此这肯定是在运行时发生的错误,没有得到正确验证。我也能够找到这个相关的错误,这可能解释了这个问题的原因;如果您想显式修复它,错误中也提到了解决方案。

我仍然会考虑使用<代码> ftFrave。它确实使用了TLS作为安全性和非常安全的包装,您只需将secure参数设置为True(secure=True)即可启用它,默认情况下,该参数设置为False

 类似资料:
  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们

  • 处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En

  • VR设计 VR设计不同于平面体验设计。作为一种新的媒介,有新的最佳实践需要遵循,特别是保持用户的舒适性和存在性。这在如下指南中已经写得很透彻了: Oculus VR最佳实践 Leap Motion VR最佳实践指南 一些值得注意的事情: 公共的金科玉律是永远不要意外地把相机控制权从用户手中剥夺。 单位(比如对于位置)应该考虑使用米(m)。这是因为WebVR API以米为单位返回姿势数据,进而传送给

  • 本章文档将阐述一些使用herosphp开发一些常用模块的一些比较好的实践。 未完待续。。。

  • 适当的使用vuex 能不用就不用。 能用就用。 不要为了使用而使用,一个小方法里面有5个设计模式。 不要过度使用CSS框架 因为CSS框架一般会大幅度增加文件体积。 例如 bootstrap, ele.me前端框架。 这个在低端安卓机上影响显著。 使用CDN来存放js, css, 和图片文件。 灵活使用第三方Vue 插件 例如: 轮播图, 表单验证等等。这些轮子都是现成的。 前端逻辑务必简单 能在

  • 这是 Martin Zinkevich (Google) 在 NIPS 2016 Workshop 分享的谷歌机器学习最佳实践翻译版,PDF 全文见 Rules of Machine Learning: Best Practices for ML Engineering。 机器学习产品所要面对的难题是工程问题(而不是 ML 算法),所以在做机器学习时要遵循跟其他产品类似的工程原则。 术语 实例(

  • Create Helper Builders and Checkers It’s pretty simple to extract certain checks (if a node is a certain type) into their own helper functions as well as extracting out helpers for specific node types

  • 嗨,我正在开发一个与Express API通信的React应用程序。我试图实现JWT认证,但我不知道当jwt到期时会发生什么。如果用户在令牌过期时被注销,这似乎不是很用户友好。 我应该使用刷新令牌吗?正如node-jsonwebTokens包留档中所说。这可能不是最好的方法。 我应该在对服务器的每个请求中创建一个新的jwt吗?如果用户长时间阅读一篇文章而不做任何请求,他将被注销。 也许我错了,最好