【问题标题】:Having trouble downloading file via SFTP [duplicate]通过 SFTP 下载文件时遇到问题 [重复]
【发布时间】:2019-01-15 23:16:17
【问题描述】:

我一直在四处寻找并尝试了几种解决方案,但没有任何效果。我正在尝试运行 python 脚本以通过 SFTP 下载特定文件夹。我一直在尝试按照此处的说明进行操作:https://pysftp.readthedocs.io/en/release_0.2.9/ 但运行此命令时没有运气:

import pysftp

with pysftp.Connection(host="sftp.url.com",username="username",password="password",port="##",private_key="C:\location\location"):
    with sftp.cd('public'):
        sftp.get('/todaysdate')

希望能够抓取单个文件并将其下载到本地文件夹。

提前感谢并道歉,如果这是一个基本问题,已经做了很多挖掘,但没有找到解决方案的运气。

这是我收到的错误消息:

Warning (from warnings module):
  File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\pysftp\__init__.py", line 61
    warnings.warn(wmsg, UserWarning)
UserWarning: Failed to load HostKeys from M:\\.ssh\known_hosts.  You will need to explicitly load HostKeys (cnopts.hostkeys.load(filename)) or disableHostKey checking (cnopts.hostkeys = None).
Traceback (most recent call last):
  File "C:\BBG API\keytest2.py", line 3, in <module>
    with pysftp.Connection(host="sftp.url.com",username="user",password="pass",port="##",private_key="C:/CSV/filename"):
  File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\pysftp\__init__.py", line 132, in __init__
    self._tconnect['hostkey'] = self._cnopts.get_hostkey(host)
  File "C:\Users\user\AppData\Local\Programs\Python\Python36\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 sftp.trafix.com found.

【问题讨论】:

  • 这种“不走运”是如何表现出来的? 究竟是哪个错误消息或异常?你确定文件名上的/ 合适吗?通常,这会告诉服务器忽略您的cd 并返回根文件系统。
  • 展示您尝试过的特定“几种解决方案”以及它们不起作用的具体方式会很有帮助,顺便说一句——这样我们就有更多的上下文来进行诊断。
  • 抱歉,将确保记下我将来尝试的内容,而不是覆盖。我将收到的错误消息添加到正文中 ^
  • 好的,警告告诉你 known_hosts 列表不是预期的格式,然后错误告诉你它失败了,因为它找不到 known_hosts 条目。这两件事似乎相关,不是吗? :)
  • ...所以,从查看known_hosts 文件的格式开始。

标签: python sftp pysftp


【解决方案1】:

有几件事。我看到您使用的是 Windows,所以您是否尝试过 WinSCP 以确保您可以在 Python 环境之外按预期下载文件?

而且您正在更改目录,所以我不明白为什么您需要在文件名之前放置一个正斜杠。

另外,您的私钥位置使用正斜杠(例如 c:/location/location)。

【讨论】:

  • 我使用的是 Filezilla 而不是 WinSCP,但是是的,检查了我可以在 Python 环境之外下载文件。 'filedate' 是文件夹的占位符,文件位于该路径中。我尝试切换到私钥位置的正斜杠,但没有运气
  • 确实,我认为这个问题与那个问题重复,应该这样结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
相关资源
最近更新 更多