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
Вкрай малоймовірно, але все-таки можливо, що файл пошкоджений. Створіть нову та знову заповніть вміст із останнього проходу.
13димітар

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

2
"Я також пропустив один тире з першого рядка." Дітто. Дякую @ItsGreg за це. Я так часто пропускаю перший символ під час вибору та копіювання між терміналами!
зоряний

15

Що я зробив, щоб виправити цю проблему, це те, що я використовую для перетворення файлу PPK за допомогою PuttyGen.

Спочатку завантажте urkey.PPK, а потім у меню перетворення натисніть Експорт у формат файлу Opennssh. Це створить файл-клавішу 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речі, працюють ... Гммм. Не знаю чому ..
lukik

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, і Restarted SSH demon)

1

Я щойно зіткнувся з цим сьогодні, коли писав деякі утиліти для позначення 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 - я думаю, ви повинні мати новий рядок наприкінці свого приватного ключа.


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

Переконайтесь, що ви перейменовуєте свій ПРИВАТНИЙ ключ та видаліть розширення файлу, яке є проблемою.

Кроки, які я зробив

Створіть свій відкритий ключ:

Переконайтеся, що ви знаходитесь в одному каталозі, у якого є приватний ключ

Як створити відкритий ключ:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.