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

464

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

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

TCSGrad
источник
Также не должно быть проблем с использованием ключей в 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.

bukzor
источник
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 в файл, как показано на следующем рисунке:

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

Zac
источник
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;

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

jfreak53
источник
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.

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

kovacsbv
источник
0

PPK → OpenSSH RSA с PuttyGen & Docker.

Закрытый ключ:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -O private-openssh -o my-openssh-key

Открытый ключ:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -L -o my-openssh-key.pub

Смотрите также https://hub.docker.com/r/zinuzoid/puttygen

Юрий МеркУрий
источник