【问题标题】:Paramiko SSH client is unable to unpack ED25519 keyParamiko SSH 客户端无法解压 ED25519 密钥
【发布时间】:2020-03-12 19:42:55
【问题描述】:

我正在尝试使用密钥对与 SFTP 服务器建立 SSH 连接。

如果我通过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。)
  • :facepalm。哇。我觉得自己像个白痴。继续写下来作为答案,我会接受。

标签: python-3.x ssh paramiko ed25519


【解决方案1】:

这是 Dave Thompson 的评论,作为结束此循环的答案:

paramiko.RSAKey.from_private_key_file 读取 RSA 密钥。要读取 Ed25519 密钥,请使用 paramiko.Ed25519Key.from_private_key_file。 (至少 2.2.0。)

【讨论】:

  • 似乎不起作用,paramiko==2.7.1:说AttributeError: module 'paramiko.ed25519key' has no attribute 'from_private_key_file'。也许它又被删除了?
  • 它是paramiko.Ed25519Key.from_private_key_file
  • @ShreevatsaR 更新了答案以反映 RonanT 所说的内容。
猜你喜欢
  • 2016-03-03
  • 2011-08-23
  • 2022-09-30
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
相关资源
最近更新 更多