提问者:小点点

无法使用Python连接到客户端SFTP?[副本]


我以前通过vb连接到客户机SFTP。net脚本,该脚本已成功运行,但我不想使用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.

共1个答案

匿名用户

库正在尝试查找已知的\u主机文件以执行主机密钥检查。您可以禁用它,但正如文档中所述,强烈建议您禁用它。

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

更好的方法是使用CnOpts设置known_hosts路径。我没有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