首页 > 解决方案 > 无法使用 Python 连接到客户端 SFTP?

问题描述

我以前使用 WinSCP 通过 vb.net 脚本连接到客户端 SFTP,该脚本已成功运行,但我不想使用 WinSCP。我对 Python 很陌生,但认为我对项目的总体目标将更适合使用 Python。

我认为我缺少的可能是公钥和/或我的私钥格式错误。真的很感激这方面的一些帮助,因为我已经被困了好几天尝试不同的事情。

import pysftp

myHostname = 'sftp.name.com'
myUsername = 'username'
myPassword = 'password'
myKey = 'C:\\PrivateKey.ppk'

with pysftp.Connection(host=myHostname, username=myUsername, private_key=myKey, private_key_pass=myPassword) as sftp:

Error received
UserWarning: Failed to load HostKeys from C:\Users\name\.ssh\known_hosts.

标签: pythonpython-3.xsftpparamikopysftp

解决方案


库正在尝试查找known_hosts文件以进行主机密钥检查。您可以禁用它,但正如文档中所写,强烈建议不要这样做。

import pysftp

myHostname = 'sftp.name.com'
myUsername = 'username'
myPassword = 'password'
myKey = 'C:\\PrivateKey.ppk'
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

with pysftp.Connection(host=myHostname,
                       username=myUsername,
                       private_key=myKey,
                       private_key_pass=myPassword,
                       cnopts=cnopts) as sftp:
    pass

更好的方法是known_hosts使用CnOpts. 我没有 Windows 机器,但根据这个 SA 答案,也许以下方法会起作用:

import os
import pysftp

myHostname = 'sftp.name.com'
myUsername = 'username'
myPassword = 'password'
myKey = 'C:\\PrivateKey.ppk'
knownhosts_path = os.path.join(os.environ['USERPROFILE'], '.ssh', 'known_hosts')
cnopts = pysftp.CnOpts(knownhosts=knownhosts_path)
cnopts.hostkeys = None

with pysftp.Connection(host=myHostname,
                       username=myUsername,
                       private_key=myKey,
                       private_key_pass=myPassword,
                       cnopts=cnopts) as sftp:
    pass

推荐阅读