9

我正在尝试连接到 SFTP 服务器。我有一个私钥和一个密码。我已尝试阅读有关 SO 的相关问题,但无法成功连接。

这是我尝试过的:

pysftp.Connection(host=<hostname>, username=<username>,
                  password=<password>, private_key=<path to .ppk file>)

AuthenticationException:身份验证失败

pysftp.Connection(host=<hostname>, username=<username>,
                  private_key_pass=<password>, private_key=<path to .ppk file>) 

SSHException:不是有效的 DSA 私钥文件

但是,我可以使用相同的凭据并连接 FileZilla。FileZilla 要求输入密码并将.ppk文件转换为不受保护的文件。

我尝试使用与 FileZilla 中相同的主机名、用户名和密钥文件,但仍然出现错误。还尝试使用 Paramiko 进行连接。

4

5 回答 5

15

我终于可以连接了。

.pem使用 PuTTY将文件转换为文件。传递此.pem文件并保持其余参数与以前相同。

pysftp.Connection(host='hostname', username='username',
                   password='password', private_key='path to .pem file')

希望这可以帮助有类似问题的人。

于 2015-12-04T21:10:36.033 回答
0

我在 Linux 环境中遇到了同样的问题,我试图从接受的答案中遵循解决方案。我遇到的第一个问题是将.ppk文件转换为.pem文件。我发现在 Debian 环境下,我们可以使用 PuTTY 工具将.ppk文件转换为文件.pem

$ sudo apt-get install putty-tools
$ puttygen abc.ppk -O private-openssh -o abc.pem

我在尝试接受的答案时遇到的第二个问题是身份验证错误,我使用private_key_pass而不是,password并且能够建立连接。

cnopts = pysftp.CnOpts()

cnopts = modify_cnopts_as_you_wish(cnopts)

srv = pysftp.Connection(host="hostname", username="user",
                        private_key='path_to_abc.pem',
                        private_key_pass="password", 
                        cnopts=cnopts)
于 2021-02-01T10:48:11.970 回答
0

我通过从 pysftp0.2.9 降级到 pysftp 0.2.8 解决了这个问题

pip install pysftp==0.2.8

我在连接字符串中使用了私钥和私钥密码,如下所示:

import pysftp as sftp
import sys
srver = sftp.Connection(host='xx.xxx.xx.xx',username='xxxxx',password='xxx',port=9999,private_key='C:\\Users\xxxx\xxx\id_rsa.ppk',private_key_pass='xxxxxx')

请记住,端口实际上是一个数字而不是字符串。该解决方案适用于所有想要使用私钥和私钥密码以及主机名、用户名和用户密码进行连接的人。

于 2018-05-28T15:49:12.800 回答
-2

当您从 linux 控制台使用 ssh-keygen 添加密钥时,您可以直接使用选项 -m PEM 而不是使用 Putty。

ssh-keygen -t rsa -m PEM
于 2019-09-01T10:17:45.963 回答
-3

我能够解决同样的问题

ssh-keygen -t rsa -m PEM" command and 
pysftp.Connection(host='hostname', username='username',
                   private_key_pass='password', private_key='path to .pem file')
于 2019-09-18T15:30:31.353 回答