Paramiko RSAKey“私钥文件已加密”

问题描述 投票:0回答:1

我正在尝试使用 Paramiko 连接到 SFTP 站点。

"paramiko": {
            "hashes": [
                "sha256:6bef55b882c9d130f8015b9a26f4bd93f710e90fe7478b9dcc810304e79b3cd8",
                "sha256:fedc9b1dd43bc1d45f67f1ceca10bc336605427a46dcdf8dec6bfea3edf57965"
            ],
            "index": "pypi",
            "version": "==3.0.0"
        },

我有一个表单中的 .pem 文件

-----BEGIN OPENSSH PRIVATE KEY-----
data for the key
-----END OPENSSH PRIVATE KEY-----

值得一提的是,密钥是用密码加密的。

我尝试加载密钥文件,提供密码,效果很好

# Works great :)
mykey = paramiko.RSAKey.from_private_key_file(key_file_path, password=password)
self.ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# this explodes
self.ssh_client.connect(hostname=settings.ftp_host, username=username, pkey=mykey, port=22)
self.ftp = self.ssh_client.open_sftp()

paramiko.ssh_exception.PasswordRequiredException:私钥文件已加密

如果我将连接更改为

self.ssh_client.connect(hostname=settings.ftp_host, username=username, pkey=mykey, port=22, passphrase=password)

paramiko.ssh_exception.SSHException:OpenSSH 私钥文件检查不匹配

如果我尝试使用

key_filename
而不是
pkey

self.ssh_client.connect(hostname=settings.ftp_host, username=username, key_filename=key_file_path, port=22, passphrase=password)

ValueError:q 的长度必须恰好为 160、224 或 256 位

我能够使用 FileZilla 使用此密钥成功连接到 SFTP,我只是不确定我在 Paramiko 中做错了什么。

python ssh ftp sftp paramiko
1个回答
0
投票

今天解决了这个问题。

设置了 Paramiko 的日志记录,发现它默认尝试使用“rsa-sha2-512”

2023-02-16 10:01:46 - DEBUG - transport.py:1871 - paramiko.transport -                 _log() - Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2023-02-16 10:01:46 - DEBUG - transport.py:1871 - paramiko.transport -                 _log() - Server did not send a server-sig-algs list; defaulting to our first preferred algo ('rsa-sha2-512')

禁用“rsa-sha2-512”和“rsa-sha2-256”,使 Paramiko 被迫使用“ssh-rsa”解决了该问题。

self.ssh_client.connect(hostname=settings.ftp_host, username=username, pkey=mykey, disabled_algorithms=dict(pubkeys=["rsa-sha2-512", "rsa-sha2-256"]))
© www.soinside.com 2019 - 2024. All rights reserved.