Ключ SSH, сгенерированный ssh-keygen, не распознается Paramiko

У меня есть следующий код:

ssh_key = paramiko.RSAKey.from_private_key_file(key_filename)

ключ выглядит так:

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEAqdgmJ2AQlmvpCsDWjbpIvIrx4AwtKn2t10wmGZIN9pqcJgQpo3HD

и действует:

 $ ssh-keygen -l -f <mykeyfile>
 $ 2048 SHA256:x8jlUAObU3q2KXRtuGpxwhnGvB/ZoeD2IUqSA1OkCmI thomas@Thomas-MBP-2017 (RSA)

но я получаю сообщение об ошибке " Неправильный файл закрытого ключа RSA".
Это на MacOS, Python 2.7, Paramiko 2.4.2

Что я делаю неправильно?

1 ответ

Для OpenSSH 7.8, вы должны обмануть его. Бежать ssh-keygen -p [-f file] -m pem якобы изменить парольную фразу, но повторно использовать старую. использование -P oldpw -N newpw если вы хотите избежать запросов, как в сценарии, но будьте осторожны, чтобы сделать вашу парольную фразу видимой для других пользователей. В качестве побочного эффекта это переписывает ключевой файл (если не ed25519) в "старом" (OpenSSL-совместимом и, следовательно, парамико-совместимом) формате. (Если вы хотите сохранить файл в новом формате, сначала скопируйте.)

Для старых версий OpenSSH просто сделайте ssh-keygen -p [-f file] БЕЗ -o,

Кроме того, если у вас есть (или вы получите), утилита puttygen в пакете PuTTY от 0.69 и выше поддерживает этот формат. В версии Unix просто делай puttygen newfmtfile -O private-openssh -o oldfmtfile (опять же исключая ed25519). В версии AFAICT для Windows вы должны использовать графический интерфейс; загрузить новый fmtfile и выполнить преобразования / экспорт OpenSSH ключ.

Paramiko не поддерживает файлы ключей формата "BEGIN OPENSSH PRIVATE KEY" (RFC 4716), которые генерируются последними версиями OpenSSH.

Paramiko поддерживает только ключи формата PEM. Для преобразования ключа в формат PEM используйте -m PEM переключаться с ssh-keygen:

ssh-keygen -e -f key -m PEM > key.pem
Другие вопросы по тегам