Как преобразовать пары ключей SSH, сгенерированные с помощью PuTTYgen (Windows), в пары ключей, используемые ssh-agent и Keychain (Linux)


464

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

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


Также не должно быть проблем с использованием ключей в linux ... просто скопируйте их и добавьте паб к авторизованным ключам ... хотя по общему признанию я не совсем понимаю ваш вопрос.
— Рэндалл Хант

17
Нет, есть - я знаю, что ключевые форматы, используемые PuttyGen и ssh-agent, различаются, и их необходимо явно преобразовать - см. Подробный ответ Kaleb ниже.
— 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). Спас бы меня часы боли, если бы я видел это раньше! Спасибо!
— Кори

2
Может ли puttygen быть выполнен из CLI?
— CMCDragonkai

20
Я предполагаю, что это что-то новое, но если вы откроете свой закрытый ключ в puttygen, то он автоматически покажет вам совместимую с OpenSSH строку открытого ключа в пользовательском интерфейсе.
— UpTheCreek

161

Если все, что у вас есть, это открытый ключ пользователя в формате PuTTY, вы можете преобразовать его в стандартный формат openssh следующим образом:

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

Ссылки

Копия статьи

Я продолжаю забывать это, поэтому я напишу это здесь. Не гики, просто продолжай идти.

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

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

ОДНАКО, сисадмины, вы неизменно получаете файл Wonky Key, который не выдает сообщения об ошибке в журнале аутентификации, за исключением того, что ключ не найден при попытке пароля; хотя все остальные ключи работают нормально, и вы отправили этот ключ пользователю 15 раз.

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

Следует преобразовать существующий открытый ключ puttygen в формат OpenSSH.


2
Кроме того, вы можете скопировать комментарий пользователя из Comment:строки и вставить его в ту же строку, что и новый ключ, через пробел. Я не знаю, почему ssh-keygen не будет делать это по умолчанию.
— Tobia

2
Это дает мне ошибку:decode blob failed: invalid format
— Крис Стрычински

Если вы читаете оригинальную статью, ключевая деталь в том, что этот подход работает, только если вы копируете ключ из puttygen при прохождении через его пользовательский интерфейс, он не будет преобразовывать уже сгенерированный ключ из файлов, созданных puttygen.
— SLM

Могу ли я использовать тот же инструмент, чтобы преобразовать его другим способом?
— Олле Харстедт

да, похоже, что вы смотрите: ssh-keygen -e -f openssh_key.pub> putty.pub
— Эрик

148

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

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


7
В этом ответе рассказывается, как настроить аутентификацию по ключу на удаленном компьютере, который использует формат OpenSSH. Но для того, чтобы использовать сгенерированный Putty ключ на клиенте Linux , этого ответа недостаточно. Я последовал принятому ответу, и он сработал великолепно.
— wberry

52

В качестве альтернативы, если вы хотите получить закрытый и открытый ключи из файла с форматированными ключами PuTTY, вы можете использовать их puttygenв системах * nix. Для большинства систем на основе APT 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
— Юха Паломяки

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
— Martin Prikryl

Аргументы объясняют, что они представляют. +1
— danronmoon

ВЕЛИКИЙ! Это работает. Кроме того, для установки шпатлевки на Macos: brew install putty
— Dylan B

14

У меня недавно была эта проблема, когда я переходил с Putty для Linux на Remmina для Linux. У меня в каталоге много PPK-файлов для Putty, так .puttyкак я использую его уже 8 лет. Для этого я использовал простую forкоманду для оболочки bash, чтобы сделать все файлы:

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
Для таких ленивых людей, как я, вот копия-вставка, чтобы получить puttygen в Ubuntu: sudo apt-get install putty-tools
— Леннарт Роллан,

«просто» - я бы не хотел видеть сложное!
— Алекс Янсен

8

Вероятно, проще создать ключи в Linux и использовать PuTTYgen для преобразования ключей в формат PuTTY.

PuTTY Faq: A.2.2


14
К сожалению, это не вариант, если у вас есть существующие ключи, которые вы должны использовать.
— эксперт

6

Я думаю, что TCSgrad пытался спросить (несколько лет назад), как заставить Linux вести себя так, как его Windows-машина. Таким образом, существует агент (Pageant), который содержит расшифрованную копию закрытого ключа, поэтому парольную фразу нужно вводить только один раз. Затем клиент ssh, putty, может войти в систему на компьютерах, где его открытый ключ указан как «авторизованный» без запроса пароля.

Аналогом этого является то, что Linux, действующий как ssh-клиент , есть агент, хранящий расшифрованный закрытый ключ, так что когда TCSgrad набирает «ssh host», команда ssh получит свой закрытый ключ и будет работать без запроса пароля. хост, конечно, должен был бы держать открытый ключ в ~ / .ssh / authorized_keys.

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

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

Теперь у нас работает аналог Pageant, агент без загруженных ключей.

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

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


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