Ключ 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