使用私钥连接到服务器时出现pysftp AuthenticationException
pysftp AuthenticationException while connecting to server with private key
我正在尝试连接到 SFTP 服务器。我有一个私钥和一个密码。
我已经尝试阅读SO上的相关问题,但一直无法连接成功。
这是我试过的:
pysftp.Connection(host=<hostname>, username=<username>,
password=<password>, private_key=<path to .ppk file>)
AuthenticationException: Authentication failed
pysftp.Connection(host=<hostname>, username=<username>,
private_key_pass=<password>, private_key=<path to .ppk file>)
SSHException: not a valid DSA private key file
但是,我可以使用相同的凭据并连接到 FileZilla。 FileZilla 要求输入密码并将 .ppk
文件转换为不受保护的文件。
我尝试使用与 FileZilla 中相同的主机名、用户名和密钥文件,但我仍然收到错误。
还尝试使用 Paramiko 进行连接。
我终于可以连接了。
使用 PuTTY 将文件转换为 .pem
文件。通过了这个 .pem
文件并保持其余参数与之前相同。
pysftp.Connection(host='hostname', username='username',
password='password', private_key='path to .pem file')
希望这对遇到类似问题的人有所帮助。
我通过从 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')
请记住端口实际上是一个数字而不是字符串。该解决方案适用于所有想要使用私钥和私钥密码以及主机名、用户名和用户密码进行连接的人。
当您从 linux 控制台使用 ssh-keygen 添加密钥时,您可以直接使用选项 -m PEM 而不是使用 Putty。
ssh-keygen -t rsa -m PEM
我用
解决了同样的问题
ssh-keygen -t rsa -m PEM" command and
pysftp.Connection(host='hostname', username='username',
private_key_pass='password', private_key='path to .pem file')
我在 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)
我正在尝试连接到 SFTP 服务器。我有一个私钥和一个密码。 我已经尝试阅读SO上的相关问题,但一直无法连接成功。
这是我试过的:
pysftp.Connection(host=<hostname>, username=<username>,
password=<password>, private_key=<path to .ppk file>)
AuthenticationException: Authentication failed
pysftp.Connection(host=<hostname>, username=<username>,
private_key_pass=<password>, private_key=<path to .ppk file>)
SSHException: not a valid DSA private key file
但是,我可以使用相同的凭据并连接到 FileZilla。 FileZilla 要求输入密码并将 .ppk
文件转换为不受保护的文件。
我尝试使用与 FileZilla 中相同的主机名、用户名和密钥文件,但我仍然收到错误。 还尝试使用 Paramiko 进行连接。
我终于可以连接了。
使用 PuTTY 将文件转换为 .pem
文件。通过了这个 .pem
文件并保持其余参数与之前相同。
pysftp.Connection(host='hostname', username='username',
password='password', private_key='path to .pem file')
希望这对遇到类似问题的人有所帮助。
我通过从 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')
请记住端口实际上是一个数字而不是字符串。该解决方案适用于所有想要使用私钥和私钥密码以及主机名、用户名和用户密码进行连接的人。
当您从 linux 控制台使用 ssh-keygen 添加密钥时,您可以直接使用选项 -m PEM 而不是使用 Putty。
ssh-keygen -t rsa -m PEM
我用
解决了同样的问题ssh-keygen -t rsa -m PEM" command and
pysftp.Connection(host='hostname', username='username',
private_key_pass='password', private_key='path to .pem file')
我在 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)