我正在尝试使用密钥对进行SSH连接到SFTP服务器。
如果我通过 ssh-keygen -t rsa
生成RSA密钥,则可以使用该密钥对进行连接。
当我通过Paramiko连接到服务器时,一切都很顺利:
private_key = paramiko.RSAKey.from_private_key_file("/path/to/my/private/key")
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print("Connecting.")
client.connect(hostname="host.sftp.com", username="user", pkey=private_key)
print("Connected.")
然而,如果我尝试使用ED25519密钥进行此操作,我会收到以下错误提示:
ssh-keygen -t ed25519
File "/usr/local/lib/python3.7/site-packages/paramiko/pkey.py", line 235, in from_private_key_file
key = cls(filename=filename, password=password)
File "/usr/local/lib/python3.7/site-packages/paramiko/rsakey.py", line 55, in __init__
self._from_private_key_file(filename, password)
File "/usr/local/lib/python3.7/site-packages/paramiko/rsakey.py", line 176, in _from_private_key_file
self._decode_key(data)
File "/usr/local/lib/python3.7/site-packages/paramiko/rsakey.py", line 192, in _decode_key
n, e, d, iqmp, q, p = self._uint32_cstruct_unpack(data, "iiiiii")
File "/usr/local/lib/python3.7/site-packages/paramiko/pkey.py", line 529, in _uint32_cstruct_unpack
raise SSHException(str(e))
paramiko.ssh_exception.SSHException: unpack requires a buffer of 4 bytes
我有点不知所措,因为围绕这个问题搜索似乎没有相关的解决方案。这是 paramiko
中的一个错误吗?还是我的 SSHClient
初始化方式存在问题?或者实际上这是一个理论问题(即,ED25519 创建密钥的方式,无法通过低级别的 unpack()
调用来读取)?
paramiko.RSAKey.from_private_key_file
用于读取 RSA 密钥。要读取 Ed25519 密钥,请使用paramiko.ed25519key.from_private_key_file
。(需要至少 2.2.0 版本。) - dave_thompson_085