Як конвертувати SSH ключові пари, згенеровані за допомогою PuTTYgen (Windows), у пари пар, що використовуються ssh-агентом та Keychain (Linux)


464

Я генерував пари ключів за допомогою PuTTYgen і входив у систему за допомогою Pageant, так що мені довелося вводити свою фразу лише один раз, коли моя система завантажується.

Як досягти цього в Linux? Я чув, keychainале чую, що він використовує інший формат пари ключів - я не хочу змінювати свої клавіші Windows, і було б добре, якби я міг безперешкодно підключитися однаково в Windows та Linux.


Не повинно виникнути жодних проблем і з ключами в Linux ... просто скопіюйте їх і додайте паб до авторизованих ключів ... хоча правда, я не зовсім розумію ваше питання.
Полювання

17
Ні, є - я знаю це дуже багато, що ключові формати, які використовуються PuttyGen та ssh-агентом, різні, і їх потрібно явно перетворити - див. Докладну відповідь Калеба нижче.
TCSGrad

Відповіді:


714

puttygenпідтримує експорт вашого приватного ключа у сумісний з OpenSSH формат. Потім можна використовувати інструменти OpenSSH для відтворення відкритого ключа.

  1. Відкрийте PuttyGen
  2. Клацніть Завантажити
  3. Завантажте свій приватний ключ
  4. Перейдіть Conversions->Export OpenSSHта експортуйте свій приватний ключ
  5. Скопіюйте свій приватний ключ у ~/.ssh/id_dsa(або id_rsa).
  6. Створіть версію RFC 4716 відкритого ключа за допомогою ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
    
  7. Перетворіть відкритий ключ RFC 4716 у формат OpenSSH:

    ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub
    

Дивіться це та це для отримання додаткової інформації.


12
Для тих, хто It is required that your private key files are NOT accessible by othersпомилився, як я бігав, cd ~/.sshіchmod 700 id_rsa
експерт

77
Ви маєте на увазі chmod 600 id_rsa . Файл не повинен бути виконуваним. :)
sig11

2
Ця відповідь була ключовою умовою для отримання ssh з командного рядка Windows, використовуючи для мене безпечні ключі (спеціально для доступу до git). Врятували б мені години болю, якби я бачив це раніше! Дякую!
cori

2
Чи можна виконати путіген з CLI?
CMCDragonkai

20
Я припускаю, що це щось нове, але якщо ви відкриєте свій приватний ключ у puttygen, він автоматично покаже вам інтерфейс, сумісний з OpenSSH, скопіюваний, відкритий ключ в інтерфейсі користувача.
UpTheCreek

161

Якщо все, що у вас є, є відкритим ключем від користувача у форматі стилю PuTTY, ви можете конвертувати його у стандартний формат opensh, наприклад:

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

Список літератури

Копія статті

Я все це забуваю, тому я напишу тут. Невихованці, просто продовжуйте ходити.

Найпоширеніший спосіб зробити ключ в Windows - це використання Putty / Puttygen. Puttygen забезпечує акуратну утиліту для перетворення приватного ключа Linux у формат Putty. Однак те, на що не звертається, це те, що коли ви зберігаєте відкритий ключ за допомогою puttygen, він не працюватиме на сервері Linux. Windows розміщує деякі дані в різних областях і додає розриви рядків.

Рішення: Коли ви потрапите на екран відкритого ключа, створюючи свою пару ключів у puttygen, скопіюйте відкритий ключ та вставте його в текстовий файл із розширенням .pub. Ви заощадите систематичні години розчарування, читаючи подібні публікації.

ЗАРАЗ, sysadmins, ви незмінно отримуєте нескінченний файл ключа, який не передає повідомлення про помилку в журнал auth, за винятком того, що ключ не знайдено, намагаючись пароль; незважаючи на те, що ключі всіх інших працюють добре, і ви надіслали цей ключ назад користувачеві 15 разів.

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

Слід перетворити існуючий відкритий ключ puttygen у формат OpenSSH.


2
Також ви можете скопіювати коментар користувача з Comment:рядка та вставити його в ту саму лінію, що і новий ключ, розділений пробілом. Я не знаю, чому ssh-keygen не зробить цього за замовчуванням.
Тобія

2
Це дає мені помилку:decode blob failed: invalid format
Кріс Стричинський

Якщо ви читаєте оригінальну статтю, ключовою деталлю є те, що такий підхід працює лише в тому випадку, якщо ви копіюєте ключ із puttygen під час переходу через його інтерфейс, він не перетворить вже створений ключ з файлів, вироблених puttygen.
slm

Чи можу я використати той же інструмент, щоб конвертувати його іншим способом?
Olle Härstedt

так, схоже на те, що ти дивишся: ssh-keygen -e -f openssh_key.pub> putty.pub
Ерік

148

Більш новіші версії PuTTYgen (у мене 0,64) можуть показувати відкритий ключ OpenSSH, який потрібно вставити у систему Linux у .ssh/authorized_keysфайл, як показано на наступному зображенні:

введіть тут опис зображення


7
Ця відповідь пояснює, як налаштувати аутентифікацію ключів на пульті, що використовує формат OpenSSH. Але для використання ключа, створеного Putty на клієнті Linux , ця відповідь недостатня. Я дотримувався прийнятої відповіді, і це чудово спрацювало.
wberry

52

Крім того, якщо ви хочете захопити приватні та відкриті ключі з форматованого файлу ключів PuTTY, ви можете використовувати puttygenв * nix системах Для більшості підходящих систем puttygenє частиною putty-toolsпакету.

Виведення приватного ключа з форматованого файлу ключів PuTTY:

$ puttygen keyfile.pem -O private-openssh -o avdev.pvk

Для відкритого ключа:

$ puttygen keyfile.pem -L


Якщо ви з якоїсь причини ОБОВ'ЯЗКОВО це зробити у вікні Windows (не можете надійно перенести всі ключі до * nix) і у вас є стільки клавіш за допомогою графічного інтерфейсу, громіздко, спробуйте скласти джерело Unix під Cygwin. Цей puttygen.exe надасть CLI "пакетний режим", як описано вище.
Тоддіус Жо

2
OSX:brew install putty
Juha Palomäki

1
Це слід змінити: puttygen inppk -O private-openssh -o outpemі puttygen inppk -L(або ssh-keygen -y -f outpem)
dave_thompson_085

27
sudo apt-get install putty

Це автоматично встановить інструмент puttygen.

Тепер для перетворення файлу PPK для використання з командою SSH виконайте наступне в терміналі

puttygen mykey.ppk -O private-openssh -o my-openssh-key

Потім ви можете підключитися через SSH за допомогою:

ssh -v user@example.com -i my-openssh-key

http://www.graphicmist.in/use-your-putty-ppk-file-to-ssh-remote-server-in-ubuntu/#comment-28603


Це насправді не більше того, про що вже йдеться у відповіді @John Jawed
Мартін

Аргументи пояснюють, що вони представляють. +1
danronmoon

ВЕЛИКИЙ! Це працює. Крім того, встановити шпаклівку на Macos: варити встановити шпаклівку
Dylan B

14

Нещодавно у мене виникла ця проблема, коли я переходив з Putty для Linux до Remmina для Linux. Тож у мене в .puttyкаталозі багато файлів PPK для Putty, оскільки я використовую це вже 8 років. Для цього я використовував просту forкоманду для bash shell, щоб зробити всі файли:

cd ~/.putty
for X in *.ppk; do puttygen $X -L > ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pub; puttygen $X -O private-openssh -o ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pvk; done;

Дуже швидко і до речі, виконав роботу для всіх файлів, які мали шпаклівку. Якщо він знайде ключ із паролем, він зупиниться і спочатку запитає пароль для цього ключа, а потім продовжить.


2
Для ледачих ppl, таких як я, ось копію-вставте, щоб отримати puttygen на ubuntu: sudo apt-get install putty-tools
Lennart Rolland

"просто" - Мені б не важко бачити складне!
Алекс Янсен

8

Можливо, простіше створити свої ключі під Linux та використовувати PuTTYgen для перетворення клавіш у формат PuTTY.

PuTTY Faq: A.2.2


14
На жаль, це не варіант, якщо у вас є наявні ключі, які ви повинні використовувати.
експерт

6

Я думаю, що TCSgrad намагався запитати (кілька років тому) - як змусити Linux вести себе так, як робить його машина Windows. Тобто є агент (виступ), який зберігає розшифровану копію приватного ключа, так що пароль потрібно вводити лише один раз. Потім клієнт ssh, putty, може увійти в машини, де його відкритий ключ вказаний як "авторизований" без запиту пароля.

Аналогом цього є те, що Linux, виступаючи в якості ssh-клієнта , має агент, який тримає розшифрований приватний ключ, так що, коли TCSgrad набере "ssh-хост", команда ssh отримає його приватний ключ і піде, не вимагаючи введення пароля. Хост, звичайно, повинен був би тримати відкритий ключ у ~ / .ssh / санкціонованих_кеях.

Аналог Linux до цього сценарію здійснюється за допомогою ssh-agent (аналог виступів) та ssh-add (аналог додавання приватного ключа до виступу).

Метод, який працював для мене, полягав у використанні: $ ssh-agent $ SHELL Цей $ SHELL був магічним трюком, який мені потрібен, щоб змусити агента працювати та продовжувати працювати. Я виявив, що десь у мережі, і це закінчилося кілька годин ударом головою об стіну.

Тепер у нас є аналог запущеного конкурсу, агент без завантажених ключів.

Введення $ ssh-add самостійно додасть (за замовчуванням) приватні ключі, перелічені у файлах ідентифікацій за замовчуванням у ~ / .ssh.

Веб - статтю з набагато більш детальною інформацією можна знайти тут


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