- How to convert SSH keypairs generated using PuTTYgen (Windows) into key-pairs used by ssh-agent and Keychain (Linux)
- 10 Answers 10
- References
- Copy of article
- Как конвертировать ключи SSH из формата PuTTY в формат OpenSSH
- Как извлечь ключи SSH из .ppk
- Как установить PuTTY в Linux
- Как конвертировать ключи PuTTY (.ppk) в формат OpenSSH
- Извлечение приватного ключа с помощью PuTTYgen в графическом пользовательском интерфейсе
How to convert SSH keypairs generated using PuTTYgen (Windows) into key-pairs used by ssh-agent and Keychain (Linux)
I’ve generated key pairs using PuTTYgen and been logging in using Pageant, so that I have to enter my pass-phrase only once when my system boots. How do I achieve this in Linux? I’ve heard of keychain but I hear that it uses a different key pair format — I don’t want to change my Windows keys and it would be nice if I could seamlessly connect in the same manner in both Windows and Linux.
There shouldn’t be any problems using the keys in linux as well. just copy them over and add the pub to authorized keys. though admittedly I don’t entirely understand your question.
Nope , there is — I know this much that the key formats used by PuttyGen and ssh-agent are different , and they have to be converted explicitly — see Kaleb’s detailed answer below.
10 Answers 10
puttygen supports exporting your private key to an OpenSSH compatible format. You can then use OpenSSH tools to recreate the public key.
- Open PuttyGen
- Click Load
- Load your private key
- Go to Conversions->Export OpenSSH and export your private key
- Copy your private key to ~/.ssh/id_dsa (or id_rsa ).
- Create the RFC 4716 version of the public key using ssh-keygen
ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub
See this and this for more information.
For those who get It is required that your private key files are NOT accessible by others error like I had run cd ~/.ssh and chmod 700 id_rsa
This answer was the key to getting ssh from the windows command line using passwordless keys for me (specifically for git access). Would have saved me hours of pain if I had seen it earlier! Thanks!
I assume this is something new, but if you open your private key in puttygen, then it will automatically show you an OpenSSH compatible, copyable, public key string in the UI.
If all you have is a public key from a user in PuTTY-style format, you can convert it to standard openssh format like so:
ssh-keygen -i -f keyfile.pub > newkeyfile.pub
References
Copy of article
I keep forgetting this so I’m gonna write it here. Non-geeks, just keep walking.
The most common way to make a key on Windows is using Putty/Puttygen. Puttygen provides a neat utility to convert a linux private key to Putty format. However, what isn’t addressed is that when you save the public key using puttygen it won’t work on a linux server. Windows puts some data in different areas and adds line breaks.
The Solution: When you get to the public key screen in creating your key pair in puttygen, copy the public key and paste it into a text file with the extension .pub. You will save you sysadmin hours of frustration reading posts like this.
HOWEVER, sysadmins, you invariably get the wonky key file that throws no error message in the auth log except, no key found, trying password; even though everyone else’s keys are working fine, and you’ve sent this key back to the user 15 times.
ssh-keygen -i -f keyfile.pub > newkeyfile.pub
Should convert an existing puttygen public key to OpenSSH format.
Also, you may want to copy the user’s comment from the Comment: line and paste it on the same line as the new key, separated with a space. I don’t know why ssh-keygen won’t do this by default.
If you read the original article, the key detail is that this approach only works if you copy the key from puttygen when going through it’s UI, it will not convert an already generated key from files produced by puttygen.
Newer versions of PuTTYgen (mine is 0.64) are able to show the OpenSSH public key to be pasted in the linux system in the .ssh/authorized_keys file, as shown in the following image:
This answer covers how to set up key authentication on a remote that uses OpenSSH format. But in order to use a Putty-generated key on a Linux client, this answer is insufficient. I followed the accepted answer and it worked splendidly.
Alternatively if you want to grab the private and public keys from a PuTTY formated key file you can use puttygen on *nix systems. For most apt-based systems puttygen is part of the putty-tools package.
Outputting a private key from a PuTTY formated keyfile:
$ puttygen keyfile.pem -O private-openssh -o avdev.pvk
If for some reason you MUST do this on a Windows box (cannot securely transfer all the keys to a *nix) and have so many keys using the GUI is cumbersome, try compiling the Unix source under Cygwin. That puttygen.exe will give you CLI «batch mode» like described above.
That should be reversed: puttygen inppk -O private-openssh -o outpem and puttygen inppk -L (or ssh-keygen -y -f outpem )
sudo apt-get install putty
This will automatically install the puttygen tool.
Now to convert the PPK file to be used with SSH command execute the following in terminal
puttygen mykey.ppk -O private-openssh -o my-openssh-key
Then, you can connect via SSH with:
ssh -v user@example.com -i my-openssh-key
I recently had this problem as I was moving from Putty for Linux to Remmina for Linux. So I have a lot of PPK files for Putty in my .putty directory as I’ve been using it’s for 8 years. For this I used a simple for command for bash shell to do all files:
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;
Very quick and to the point, got the job done for all files that putty had. If it finds a key with a password it will stop and ask for the password for that key first and then continue.
It’s probably easier to create your keys under linux and use PuTTYgen to convert the keys to PuTTY format.
I think what TCSgrad was trying to ask (a few years ago) was how to make Linux behave like his Windows machine does. That is, there is an agent (pageant) which holds a decrypted copy of a private key so that the passphrase only needs to be put in once. Then, the ssh client, putty, can log in to machines where his public key is listed as «authorized» without a password prompt.
The analog for this is that Linux, acting as an ssh client, has an agent holding a decrypted private key so that when TCSgrad types «ssh host» the ssh command will get his private key and go without being prompted for a password. host would, of course, have to be holding the public key in ~/.ssh/authorized_keys.
The Linux analog to this scenario is accomplished using ssh-agent (the pageant analog) and ssh-add (the analog to adding a private key to pageant).
The method that worked for me was to use: $ ssh-agent $SHELL That $SHELL was the magic trick I needed to make the agent run and stay running. I found that somewhere on the ‘net and it ended a few hours of beating my head against the wall.
Now we have the analog of pageant running, an agent with no keys loaded.
Typing $ ssh-add by itself will add (by default) the private keys listed in the default identity files in ~/.ssh .
A web article with a lot more details can be found here
Как конвертировать ключи SSH из формата PuTTY в формат OpenSSH
PuTTY — это популярная программа для подключения к удалённым компьютерам по протоколам Telnet, SSH, Rlogin, Serial и Raw. Особенно широко эта программа распространена на Windows, так как раньше ей не было альтернатив на этой ОС.
В пакет PuTTY входит программа PuTTYgen, которая позволяет генерировать пару публичный и приватный ключ SSH. Для чего нужны эти ключи и как ими пользоваться смотрите в разделе «Вход в SSH без пароля (с использованием файлов ключей)».
Файлы, сгенерированные в PuTTYgen, имеют расширение .ppk и примерно следующую структуру:
Как извлечь ключи SSH из .ppk
Может понадобится извлечь приватный ключ, или публичный ключ или сразу оба ключа из файла .ppk. Это можно сделать в командной строке с помощью улиты PuTTYgen или в графическом интерфейсе. Данная инструкция покажет как это сделать. Описанные способы применимы для Windows и Linux.
Начать нужно с установки PuTTY, если вы ещё этого не сделали
Как установить PuTTY в Linux
В Debian, Linux Mint, Kali Linux, Ubuntu и их производные выполните команду:
В дистрибутивах на основе RPM:
В Arch Llinux, BlackArch и их производных:
Установите Homebrew, затем выполните:
Как конвертировать ключи PuTTY (.ppk) в формат OpenSSH
Поместите свои ключи в какой-нибудь каталог, например ваша домашняя папка. Теперь преобразуйте ключи PPK в пары ключей SSH.
Чтобы сгенерировать закрытый (приватный) ключ:
cd ~ puttygen id_dsa.ppk -O private-openssh -o id_rsa
и чтобы сгенерировать открытый (публичный ключ):
puttygen id_dsa.ppk -O public-openssh -o id_rsa.pub
Переместите эти ключи в ~/.ssh и убедитесь, что правильно установлены разрешения на приватный ключ:
mkdir -p ~/.ssh mv -i ~/id_dsa* ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 666 ~/.ssh/id_rsa.pub
Извлечение приватного ключа с помощью PuTTYgen в графическом пользовательском интерфейсе
Откройте PuTTYgen, нажмите кнопку «Load» и выберите файл .ppk с ключами.
Вы сразу увидите публичный ключ SSH, который вы можете скопировать и вставить в файл.
Теперь в меню перейдите в «Conversions» → «Export OpenSSH key» и сохраните приватный ключ.
Скопируйте ваш приватный ключ в файл ~/.ssh/id_dsa (или id_rsa).
Вы могли скопировать публичный ключ, как это показано на скриншоте выше — он размещён в области, отмеченной цифрой 2. Но вы также можете конвертировать его используя утилиту ssh-keygen.
Опция -y прочитает файл OpenSSH формата с приватным ключом и напечатает в стандартный вывод публичный ключ OpenSSH.
Также с помощью опции -f нужно указать путь до приватного ключа, из которого будет извлечён соответствующий ему публичный ключ:
ssh-keygen -y -f ПРИВАТНЫЙ-КЛЮЧ
Например, приватный ключ помещён в файл id_rsa, тогда команда извлечения из него публичного ключа следующая:
Вы можете столкнуться с ошибкой:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "id_rsa": bad permissions
Она означает, что приватный ключ доступен для чтения кому угодно и программа ssh-keygen отказывается работать с ним по этой причине. Чтобы исправить эту ошибку, просто установите на файл с приватным ключом права доступа 600: