Клиент Paramiko S SH не может распаковать ключ ED25519 - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь использовать пару ключей для соединения S SH с SFTP-сервером.

Я могу это сделать, если сгенерирую ключ RSA с помощью ssh-keygen -t 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

Я немного растерялся, потому что поиск в Google, похоже, не дает каких-либо соответствующих решений. Это ошибка в paramiko? Это проблема с тем, как я инициализирую свой SSHClient? Или это на самом деле теоретическая проблема (ie. Способ, которым ED25519 создает ключ, невозможно прочитать через низкоуровневый вызов unpack())?

1 Ответ

0 голосов
/ 21 марта 2020

Это комментарий Дейва Томпсона как ответ на закрытие l oop на этом:

paramiko.RSAKey.from_private_key_file читает ключи RSA. Для чтения ключа Ed25519 используйте paramiko.ed25519key.from_private_key_file. (И как минимум 2.2.0.)

...