Итак, некоторое время назад я установил сервер на AWS и использовал их сгенерированный SSH-ключ. Я сохранил ключ в Lastpass, и раньше успешно получил его оттуда, и он заработал. Однако, попробовав это снова сегодня, я не могу заставить его работать.
-rw------- 1 itsgreg users 1674 Jun 6 12:51 key_name
я пробовал ssh -i key_name
, ssh-keygen -f key_name
, но ничего не работает, я всегда получаю это сообщение об ошибке:
Load key "key_name": invalid format
Есть ли способ исправить это?
Что я сделал для решения этой проблемы, так это то, что я использую для преобразования файла PPK с помощью PuttyGen
.
Сначала загрузите urkey.PPK
, затем в меню преобразования щелкните экспорт в формат файла Openssh. Будет создан файл нового ключа.
сейчас, ssh -i "newkey" user@127.0.0.1
Готово. Надеюсь, поможет.
Проверить содержимое key_name
, если агент говорит invalid format
, значит, что-то не так с ключом - например ... вы уверены, что это правильный ключ? Даже если это не тот закрытый ключ, который вам нужен, агент ssh не вернет invalid format
если ключ рабочий, вы просто не сможете подключиться. По какой-то причине вы могли поместить туда свой открытый ключ. Проверь это!
У меня была такая же проблема, и оказалось, что по какой-то причине у меня в файле были разделители строк в стиле Windows (CRLF).
Кроме того, файл должен заканчиваться одним LF.
Исправление снова сделало вещи модными.
После недавнего обновления Fedora 32 я начал получать эти предупреждения при подключении к удаленным хостам.
Решил проблему добавлением pkcs11: к IdentityFile параметр в моем .ssh / config как это:
IdentityFile pkcs11:~/.ssh/my_key.pem
Для справки, выдержка из справочной страницы ssh_config:
Удостоверение аутентификации также можно указать в форме URI PKCS # 11, начинающегося со строки pkcs11 :.
Я просил openssh использовать конкретный файл идентификации, указав его в файле .ssh / config.
Исходная рабочая конфигурация имела
IdentityFile = <path to public key file>
Это перестало работать без каких-либо изменений. Немного подумав, я заменил «путь к файлу открытого ключа» выше на «путь к файлу закрытого ключа». Это сработало. Причина в том, что как файлы с открытым, так и закрытым ключом имеют большие числа, связанные с peudoprime, согласно алгоритму RSA. Если вы замените файл закрытого ключа файлом открытого ключа, эти криптографические числа не будут правильно извлечены из блока base64, сохраненного в файлах ключей. Кажется, что некоторые версии ssh могут определить расширение .pub и использовать его для определения правильного файла закрытого ключа - а другие версии этого не делают. Это еще один способ возникновения ошибки. Надеюсь, это кому-то поможет.
Вы должны преобразовать свой ключ .ppk в ключ OpenSSH
Вот как вы это делаете:
В моем случае оказалось, что у меня есть символы новой строки между начальным / конечным «заголовками» и ключевыми данными:
-----BEGIN RSA PRIVATE KEY-----
- Key data here -
-----END RSA PRIVATE KEY-----
Удаление лишних новых строк, чтобы стало
-----BEGIN RSA PRIVATE KEY-----
- Key data here -
-----END RSA PRIVATE KEY-----
решил мою проблему.
Я столкнулся с этим только сегодня, когда писал несколько утилит тегов git для моего конвейера CI.
Вот разница между двумя моими ключами:
$ diff ~/.ssh/gitlab ~/.ssh/git_ssh_key
27c27
< -----END OPENSSH PRIVATE KEY-----
---
> -----END OPENSSH PRIVATE KEY-----
\ No newline at end of file
Я изменил свой код так:
with open(ssh_key_file, 'w') as skf:
- skf.write(ssh_key)
+ skf.write(ssh_key + '\n')
И теперь мой ключ ssh работает.
TL; DR - я думаю, у вас должна быть новая строка в конце вашего закрытого ключа.
Начиная с openssh 7.6, по умолчанию используется новый, более безопасный формат. Вы можете принудительно преобразовать его в этот формат, используя приведенные ниже команды, чтобы изменить свой ключевой пароль. Если у вас нет и / или вы не хотите пароль, вы можете просто нажать ввод, и он все равно перепишет ключ в новом формате.
ssh-keygen -f ~/.ssh/id_rsa -p
Если вы получаете предупреждение о недопустимом формате открытого ключа, но команда все еще работает, это может быть связано с тем, что у вас есть только файл закрытого ключа и вы используете OpenSSH 8.3.
OpenSSH 8.3 включает изменение ssh-клиента, в котором он ищет соответствующий файл открытого ключа закрытому ключу и выводит это load pubkey "/home/user/.ssh/id.rsa": invalid format
предупреждение, но продолжает успешно подключаться. Инструменты, использующие ssh, такие как scp
или git
может показать key_load_public: invalid format
.
При подключении клиенту не нужен открытый ключ, только закрытый ключ. Таким образом, эта проверка бессмысленна, и она уже была удалена вышестоящим коммитом, но не находится в выпуске (пока).
Об этом идет обсуждение на форуме ArchLinux.
Вы входите не тем пользователем
В моем случае я пытался подключиться к инстансу Amazon AWS EC2, но получал ошибку
load pubkey "MyPrivateKey.pem": invalid format
Это было потому, что я пытался войти с неправильным пользователем (ec2-пользователь)
Я использовал машину Ubuntu с пользователем убунту вместо того ec2-пользователь (как указано на официальной серверной ОС Amazon Linux).
Но почему эта ошибка?
Оказывается, Amazon использует старый формат (puttygen говорит при загрузке "закрытый ключ openssh ssh-2 (старый формат pem)"), который openssh не очень нравится, так что это действительно предупреждение, а не ошибка.
Настоящая ошибка (на этом сервере нет такого пользователя) скрыта сервером (в противном случае вы можете подобрать имена для входа в систему), но вместо этого «Соединение закрыто» Показано.
Вы можете найти имя, которое вы используете для подключения к своей машине, на AWS в разделе Действия> Подключиться.
Просто следуйте ответу «Ras», то есть используйте PuTTYgen для преобразования в формат OpenSSH.
Моя проблема была связана с кодировкой. Глядя в VSCode на кодировку файла (который я создал с помощью Out-File
в PowerShell) был UTF-16LE
. Когда я переключился на UTF-8
, ключ был действительным.
Это также ошибка ssh (по крайней мере, в некоторых версиях), которую выдает, если у вас есть кодовая фраза на вашем закрытом ключе, и вы вводите кодовую фразу неправильно при попытке подключения.
(В частности, это случилось со мной с: OpenSSH_7.6p1, LibreSSL 2.6.2, который является встроенным SSH для Mac OS X 10.13.6.)
Поэтому еще раз проверьте, что вы используете правильную парольную фразу и что CAPS LOCK отключен.
У меня была эта ошибка, потому что в начале ключевого файла была пустая строка. Легко пропустить, если ты cat
вытаскивая это.
У меня была эта проблема, потому что у меня был ключ в ~ / .ssh, который на самом деле был недопустимым форматом, и у меня было много ключей, что означало, что SSH пробовал их все, хотя я указал в команде свой файл идентификации. Он просто терпит неудачу, потому что он может попробовать только 5 ключей, я думаю, а затем оставил мне эту ошибку, которая была законной, только для неправильного файла идентификации. Решением было просто использовать IdentitiesOnly yes
в моем ~ / .ssh / config.
Используйте свой закрытый ключ вместо открытого ключа.
Для всех, кто пробовал sudo puttygen ~/.ssh/your-key.pem -O private-openssh -o ~/.ssh/your-key-new.pem
и получил сообщение об ошибке puttygen: this command would perform no useful action
есть еще более новый формат, поэтому вам нужно изменить команду следующим образом:
sudo puttygen ~/.ssh/your-key.pem -O private-openssh-new -o ~/.ssh/your-key-new.pem
Я использовал ключ, сгенерированный AWS на Manjaro, который немного более продвинут, чем большинство других дистрибутивов, все еще работал, но предупреждающее сообщение раздражало.
Для получения дополнительной информации вы можете использовать man puttygen
но соответствующий раздел ниже:
-O output-type
Specify the type of output you want puttygen to produce. Acceptable options are:
private
Save the private key in a format usable by PuTTY. This will either be the standard SSH-1 key format, or PuTTY's own SSH-2 key format.
public Save the public key only. For SSH-1 keys, the standard public key format will be used (`1024 37 5698745...'). For SSH-2 keys, the public key will be output in the format specified by
RFC 4716, which is a multi-line text file beginning with the line `---- BEGIN SSH2 PUBLIC KEY ----'.
public-openssh
Save the public key only, in a format usable by OpenSSH. For SSH-1 keys, this output format behaves identically to public. For SSH-2 keys, the public key will be output in the OpenSSH
format, which is a single line (`ssh-rsa AAAAB3NzaC1yc2...').
fingerprint
Print the fingerprint of the public key. All fingerprinting algorithms are believed compatible with OpenSSH.
private-openssh
Save an SSH-2 private key in OpenSSH's format, using the oldest format available to maximise backward compatibility. This option is not permitted for SSH-1 keys.
private-openssh-new
As private-openssh, except that it forces the use of OpenSSH's newer format even for RSA, DSA, and ECDSA keys.
private-sshcom
Save an SSH-2 private key in ssh.com's format. This option is not permitted for SSH-1 keys.
If no output type is specified, the default is private.
Убедитесь, что вы переименовали свой ЧАСТНЫЙ ключ и удалили расширение файла, которое вызывает проблему.
Шаги, которые я сделал
Создайте свой открытый ключ:
Убедитесь, что вы находитесь в том же каталоге, что и закрытый ключ.
Как создать открытый ключ:
ssh-keygen -y -f Private-Key.pem > Public-key.pub
убедитесь, что ключ PUBLIC имеет расширение файла .pub
после этого предоставьте соответствующие разрешения по соображениям безопасности:
chmod 600 Private-Key.pem
chmod 400 Public-key.pub
ТОГДА самая важная часть и причина, по которой вы получили ошибку «недопустимый формат»
Убедитесь, что вы переименовали свой ЧАСТНЫЙ ключ и удалили расширение файла:
Удалите .pem из вашего закрытого ключа.
mv Private-Key.pem Private-Key
или если на компьютере с Windows переименуйте закрытый ключ, то же имя просто удалите .pem