4

我正在使用 pysftp 在 python 中编写一个脚本来建立 sftp 连接。此脚本将在 Windows (Server 2012R2) 中运行。我安装的 pysftp 版本需要主机密钥,所以我联系了我的供应商并从他们那里获得了公钥。我想不通的是如何在我的 pysftp 连接中使用这个公钥。我了解在 pysftp 0.2.9 中有一个新属性(remote_server_key),但我找不到任何如何使用它的示例,我也无法使用cnopts.hostkeys = none

有没有人有一个如何使用/集成 sftp 服务器/主机的特定公钥的示例?

请注意,这与我的连接的私钥/公钥对无关(我有这些密钥并且它们工作正常) - 这是关于主机的公钥。

4

2 回答 2

2

请注意,.pem 文件格式应如下所示(我通过 puttygen 生成)

-----BEGIN RSA PRIVATE KEY-----
MIIEog***********************************************
*****************************************************
-----END RSA PRIVATE KEY-----

使用以下代码执行传输。

import pysftp
hostname = 's-ad7**********.server.transfer.us-east-1.amazonaws.com'
username = '***'
path = 'C:\\keys\\<your_private_key_file>.pem'
def sftptransfer():
    cnopts = pysftp.CnOpts()
    cnopts.hostkeys = None  
    with pysftp.Connection(hostname, username=username, private_key=path, cnopts=cnopts) as sftp:
        sftp.put('<path of input file>', '<target directory path>') # target dirctory path is optional
        sftp.close()

sftptransfer()      
于 2020-08-13T08:36:39.757 回答
1

好的,所以我将用一种解决方法来“回答”这个问题。我最终做的是在 paramiko/pysftp 的“预期”位置创建与 known_hosts 文件等效的文件。

首先,您生成一个 known_hosts 文件。简单的参数是 sftp 主机的 FQDN(或 IP 地址)和您要连接的服务器的公钥。

例子:

sftp.myserver.com ssh-rsa AAB3nzawerdvDLGiyasdf...

创建该文件(并命名为 known_hosts)后,使用提升的命令提示符或 powershell 会话在将运行脚本的用户的主目录的根目录下创建一个 .ssh 目录。

cd c:\Users\serviceaccount

md .ssh

然后将 known_hosts 文件复制到该目录中。

现在设置您的 pysftp 会话:

import pysftp
cnopts = pysftp.CnOpts()
sftpConnect = pysftp.Connection(host="sftp.myserver.com", username="myusername", private_key="c:\\path\to\my\openssh.key", private_key_pass="randompassword", port=22, cnopts=cnopts)

刚才对我有用。

于 2017-04-12T19:23:46.747 回答