SSH Внезапно возвращается неверный формат


23

Некоторое время назад я настроил сервер на 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

Есть ли способ это исправить?

Ответы:


13

Проверьте содержимое key_name, если агент говорит invalid format, что с ключом что-то не так - как ... Вы уверены, что это правильный ключ? Даже если вам нужен не секретный ключ, агент ssh не вернется, invalid formatесли ключ работает, вы просто не сможете подключиться. Возможно, вы по какой-то причине поместили туда свой открытый ключ. Проверь это!


6
Определенно проверено. Начинается с ----BEGIN RSA PRIVATE KEY-----и заканчивается -----END RSA PRIVATE KEY-----. Плюс это раньше работало.
Грегор Мених

2
Весьма маловероятно, но все же возможно, что файл поврежден. Создайте новый и снова заполните содержимое из lastpass.
13

2
Вау, это действительно помогло! После генерации нового ключа я заметил, что новый ключ содержит 64 символа в строке, тогда как мой старый ключ имеет 76. Я переформатировал свой старый ключ, чтобы в нем было только 64 символа, затем он начал работать! Я также пропустил одну черту из первой строки.
Грегор Мених

2
«Я также пропустил одну черту из первой строки». То же самое. Спасибо @ItsGreg за это. Я так часто скучаю по первому символу при выборе и копировании между терминалами!
звездный день

15

Что я сделал, чтобы исправить эту проблему, так это то, что я использую для преобразования PPK-файл, используя PuttyGen.

Сначала загрузите urkey.PPK, затем в меню конвертации выберите экспорт в формат файла Openssh. Это создаст файл newkey.

в настоящее время, ssh -i "newkey" user@127.0.0.1

Выполнено. Надеюсь, это поможет.


4

Я просил openssh использовать определенный файл идентификации, указав его в файле .ssh / config.

Исходная рабочая конфигурация имела

IdentityFile = <path to public key file> 

Это перестало работать без каких-либо изменений. Немного подумав, я заменил «путь к файлу открытого ключа» выше на «путь к файлу закрытого ключа». Это сработало. Причина заключается в том, что файлы открытого и закрытого ключей имеют большие числа, связанные с преступным преступлением, согласно алгоритму RSA. Если вы замените файл закрытого ключа файлом открытого ключа, эти криптографические числа не будут правильно извлечены из блока base64, сохраненного в файлах ключей. Кажется, некоторые версии ssh могут определить расширение .pub и использовать его для определения правильного файла закрытого ключа - а другие версии этого не делают. Это еще один способ, которым эта ошибка может произойти. Надеюсь, это кому-нибудь поможет.


В моем случае у меня был установочный configфайл, path_to_public_keyи все работало. Однако, когда Mac сделал жесткий перезапуск, и через несколько дней я попытался сделать git push, я начал получать ошибку, указанную выше. Но когда я теперь изменил это, чтобы path_to_private_keyвсе работало ... Хммм. Не уверен почему ..
Лукик

3

У меня была та же проблема, и оказалось, что у меня в файле по какой-то причине были разделители строк в стиле Windows (CRLF).

Кроме того, файл должен заканчиваться одним LF.

Починить эти сделанные вещи снова.


Это шокирует, что этот последний LF так необходим, но это была отчасти проблема, с другой стороны, что я создал файл в Windows, и это дает ему разрывы строк CRLF. Для справки других, dos2unixэто команда для преобразования из CRLF (в стиле Windows) в LF (в стиле Linux) разрывы строк.
Хашим

1

Вы должны преобразовать ваш ключ .ppk в ключ OpenSSH

Вот как вы это делаете :

  1. Загрузите PuttyGen и создайте свою пару ключей (если у вас нет готовой пары ключей). Сохраните закрытый ключ в вашу папку (.ppk)
  2. Если у вас уже есть закрытый ключ, загрузите файл закрытого ключа (.ppk), нажав кнопку «Загрузить». В противном случае пропустите этот шаг
  3. В меню «Конверсии» выберите «Экспортировать ключ OpenSSH» и сохраните его в своей папке.
  4. Теперь вы готовы использовать ключ для входа на сервер без ввода пароля (я предполагаю, что вы уже поместили открытый ключ в /root/.ssh/authorized_keys, chmod 600 /root/.ssh/authorized_keys и перезапущенный демон SSH)

1

Я только что столкнулся с этим сегодня, когда писал несколько утилит git tagging для моего конвейера 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 - Я думаю, у вас должен быть символ новой строки в конце вашего закрытого ключа.


1

В моем случае оказалось, что у меня есть новые строки между начальными / конечными «заголовками» и ключевыми данными:

-----BEGIN RSA PRIVATE KEY-----

- Key data here -

-----END RSA PRIVATE KEY-----

Убрав лишние новые строки, чтобы стало

-----BEGIN RSA PRIVATE KEY-----
- Key data here -
-----END RSA PRIVATE KEY-----

решил мою проблему.


0

Используйте свой закрытый ключ вместо открытого ключа.


то же решение, что и мой ответ - где также добавлено объяснение
vpathak

0

У меня возникла эта проблема, потому что у меня был ключ в ~ / .ssh, который на самом деле был недопустимым форматом, и у меня было много ключей, что означало, что SSH пробовал их все, хотя я указал свой файл идентификации в команде. Это просто происходит сбой, потому что он может попробовать только 5 ключей, я думаю, а затем оставил меня с этой ошибкой, которая была законной, только для неправильного файла идентификации. Решение было просто использовать IdentitiesOnly yesв моем ~ / .ssh / config.


0

У меня была эта ошибка, потому что в начале файла ключа была пустая строка. Легко пропустить, если вы это делаете cat.


0

Это также ошибка, которую выдает ssh (по крайней мере, в некоторых версиях), если у вас есть секретная фраза в вашем закрытом ключе, и вы неправильно вводите идентификационную фразу при попытке подключения.

(В частности, это случилось со мной с: OpenSSH_7.6p1, LibreSSL 2.6.2, который является встроенным SSH для Mac OS X 10.13.6.)

Поэтому дважды проверьте, что вы используете правильную фразу-пароль и что CAPS LOCK выключен.


-2

Убедитесь, что вы переименовали свой ключ PRIVATE и удалите расширение файла, которое является проблемой.

Шаги, которые я предпринял

Создайте свой открытый ключ:

Убедитесь, что вы находитесь в той же директории, где у вас есть закрытый ключ

Как создать открытый ключ:

ssh-keygen -y -f Private-Key.pem > Public-key.pub

убедитесь, что ключ PUBLIC имеет расширение .pub

после этого предоставьте соответствующие разрешения по соображениям безопасности:

chmod 600 Private-Key.pem
chmod 400 Public-key.pub

ТОГДА самая важная часть и причина, по которой вы получили ошибку «неверный формат»

Убедитесь, что вы переименовали свой ключ PRIVATE и удалите расширение файла:

Удалите .pem из вашего закрытого ключа.

mv Private-Key.pem Private-Key

или если на компьютере с Windows переименуйте закрытый ключ, то же имя просто удалите .pem

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.