Comment convertir des paires de clés SSH générées à l'aide de PuTTYgen (Windows) en paires de clés utilisées par ssh-agent et Keychain (Linux)

464

J'ai généré des paires de clés à l'aide de PuTTYgen et je me connecte à l'aide de Pageant, de sorte que je ne dois saisir ma phrase de passe qu'une seule fois au démarrage de mon système.

Comment y parvenir sous Linux? J'en ai entendu parler keychainmais j'entends qu'il utilise un format de paire de clés différent - je ne veux pas changer mes clés Windows et ce serait bien si je pouvais me connecter de manière transparente de la même manière sous Windows et Linux.

TCSGrad
la source
Il ne devrait pas y avoir de problème pour utiliser les clés sous linux également ... il suffit de les copier et d'ajouter le pub aux clés autorisées ... bien que je ne reconnais pas entièrement votre question.
Randall Hunt
17
Non, il y a - je sais bien que les formats clés utilisés par PuttyGen et ssh-agent sont différents, et ils doivent être convertis explicitement - voir la réponse détaillée de Kaleb ci-dessous.
TCSGrad

Réponses:

714

puttygenprend en charge l'exportation de votre clé privée vers un format compatible OpenSSH. Vous pouvez ensuite utiliser les outils OpenSSH pour recréer la clé publique.

  1. Open PuttyGen
  2. Cliquez sur Charger
  3. Chargez votre clé privée
  4. Accédez à Conversions->Export OpenSSHet exportez votre clé privée
  5. Copiez votre clé privée dans ~/.ssh/id_dsa(ou id_rsa).
  6. Créez la version RFC 4716 de la clé publique à l'aide de ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
    
  7. Convertissez la version RFC 4716 de la clé publique au format OpenSSH:

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

Voir ceci et cela pour plus d'informations.

Kaleb Pederson
la source
12
Pour ceux qui se It is required that your private key files are NOT accessible by otherstrompent comme j'avais couru cd ~/.sshetchmod 700 id_rsa
expert
77
Vous voulez dire chmod 600 id_rsa . Le fichier ne doit pas nécessairement être exécutable. :)
sig11
2
Cette réponse a été la clé pour obtenir ssh à partir de la ligne de commande Windows en utilisant des clés sans mot de passe pour moi (en particulier pour l'accès git). Cela m'aurait sauvé des heures de douleur si je l'avais vu plus tôt! Merci!
cori
2
Puttygen peut-il être exécuté à partir de la CLI?
CMCDragonkai
20
Je suppose que c'est quelque chose de nouveau, mais si vous ouvrez votre clé privée dans puttygen, cela vous montrera automatiquement une chaîne de clé publique compatible et copiable OpenSSH dans l'interface utilisateur.
UpTheCreek
161

Si tout ce que vous avez est une clé publique d'un utilisateur au format PuTTY, vous pouvez la convertir au format openssh standard comme suit:

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

Références

Copie de l'article

Je continue d'oublier ça donc je vais l'écrire ici. Non-geeks, continuez à marcher.

La façon la plus courante de créer une clé sous Windows est d'utiliser Putty / Puttygen. Puttygen fournit un utilitaire soigné pour convertir une clé privée Linux au format Putty. Cependant, ce qui n'est pas résolu, c'est que lorsque vous enregistrez la clé publique à l'aide de puttygen, cela ne fonctionnera pas sur un serveur Linux. Windows place certaines données dans différentes zones et ajoute des sauts de ligne.

La solution: lorsque vous accédez à l'écran de la clé publique lors de la création de votre paire de clés dans puttygen, copiez la clé publique et collez-la dans un fichier texte avec l'extension .pub. Vous vous épargnerez des heures sysadmin de frustration en lisant des messages comme celui-ci.

CEPENDANT, sysadmins, vous obtenez invariablement le fichier de clé bancale qui ne renvoie aucun message d'erreur dans le journal d'authentification sauf, aucune clé trouvée, tentative de mot de passe; même si les clés de tout le monde fonctionnent correctement et que vous avez renvoyé cette clé à l'utilisateur 15 fois.

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

Devrait convertir une clé publique puttygen existante au format OpenSSH.

bukzor
la source
2
En outre, vous souhaiterez peut-être copier le commentaire de l'utilisateur à partir de la Comment:ligne et le coller sur la même ligne que la nouvelle clé, séparé par un espace. Je ne sais pas pourquoi ssh-keygen ne le fera pas par défaut.
Tobia
2
Cela me donne une erreur de:decode blob failed: invalid format
Chris Stryczynski
Si vous lisez l'article d'origine, le détail clé est que cette approche ne fonctionne que si vous copiez la clé de puttygen lorsque vous parcourez son interface utilisateur, elle ne convertira pas une clé déjà générée à partir de fichiers produits par puttygen.
slm
Puis-je utiliser le même outil pour le convertir dans l'autre sens?
Olle Härstedt
oui, on dirait que vous regardez: ssh-keygen -e -f openssh_key.pub> putty.pub
Erik
148

Les versions plus récentes de PuTTYgen (la mienne est 0,64) sont capables d'afficher la clé publique OpenSSH à coller dans le système Linux dans le .ssh/authorized_keysfichier, comme indiqué dans l'image suivante:

entrez la description de l'image ici

Zac
la source
7
Cette réponse explique comment configurer l'authentification par clé sur une télécommande qui utilise le format OpenSSH. Mais pour utiliser une clé générée par Putty sur un client Linux , cette réponse est insuffisante. J'ai suivi la réponse acceptée et cela a fonctionné à merveille.
wberry
52

Alternativement, si vous souhaitez récupérer les clés privées et publiques d'un fichier de clé formaté PuTTY, vous pouvez utiliser puttygensur les systèmes * nix. Pour la plupart des systèmes basés sur apt puttygenfait partie du putty-toolspackage.

Sortie d'une clé privée à partir d'un fichier de clés formaté PuTTY:

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

Pour la clé publique:

$ puttygen keyfile.pem -L

John Jawed
la source
Si, pour une raison quelconque, vous DEVEZ le faire sur une boîte Windows (ne pouvez pas transférer en toute sécurité toutes les clés vers un * nix) et que le nombre de clés en utilisant l'interface graphique est lourd, essayez de compiler la source Unix sous Cygwin. Ce puttygen.exe vous donnera le "mode batch" CLI comme décrit ci-dessus.
Toddius Zho
2
OSX:brew install putty
Juha Palomäki
1
Cela devrait être inversé: puttygen inppk -O private-openssh -o outpemet puttygen inppk -L(ou ssh-keygen -y -f outpem)
dave_thompson_085
27
sudo apt-get install putty

Cela installera automatiquement l'outil puttygen.

Maintenant, pour convertir le fichier PPK à utiliser avec la commande SSH, exécutez ce qui suit dans le terminal

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

Ensuite, vous pouvez vous connecter via SSH avec:

ssh -v [email protected] -i my-openssh-key

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

Purnendu Singh
la source
Cela ne montre pas vraiment plus que, ce qui est déjà dans la réponse de @John Jawed
Martin Prikryl
Les arguments expliquent ce qu'ils représentent. +1
danronmoon
GÉNIAL! Cela marche. De plus, pour installer du mastic sur MacOS: brew install putty
Dylan B
14

J'ai récemment eu ce problème en passant de Putty pour Linux à Remmina pour Linux. J'ai donc beaucoup de fichiers PPK pour Putty dans mon .puttyrépertoire car je l'utilise depuis 8 ans. Pour cela, j'ai utilisé une forcommande simple pour bash shell pour faire tous les fichiers:

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;

Très rapide et au point, a fait le travail pour tous les fichiers que le mastic avait. S'il trouve une clé avec un mot de passe, il s'arrêtera et demandera d'abord le mot de passe pour cette clé, puis continuera.

jfreak53
la source
2
Pour les ppl paresseux comme moi, voici du copier-coller pour obtenir puttygen sur ubuntu: sudo apt-get install putty-tools
Lennart Rolland
"simple" - je détesterais voir compliqué!
Alex Jansen
8

Il est probablement plus facile de créer vos clés sous Linux et d'utiliser PuTTYgen pour convertir les clés au format PuTTY.

FAQ PuTTY: A.2.2

Bradley Kreider
la source
14
Malheureusement, ce n'est pas une option si vous avez des clés existantes que vous devez utiliser.
expert
6

Je pense que TCSgrad essayait de demander (il y a quelques années) comment faire pour que Linux se comporte comme sa machine Windows. Autrement dit, il existe un agent (reconstitution historique) qui détient une copie déchiffrée d'une clé privée de sorte que la phrase secrète ne doit être insérée qu'une seule fois. Ensuite, le client ssh, putty, peut se connecter aux machines où sa clé publique est répertoriée comme «autorisée» sans invite de mot de passe.

L'analogue pour cela est que Linux, agissant comme un client ssh , a un agent détenant une clé privée décryptée de sorte que lorsque TCSgrad tape "hôte ssh", la commande ssh obtiendra sa clé privée et s'en ira sans être invité à entrer un mot de passe. l'hôte devrait, bien sûr, détenir la clé publique dans ~ / .ssh / authorized_keys.

L'analogue Linux de ce scénario est réalisé à l'aide de ssh-agent (l'analogue de reconstitution historique) et ssh-add (l'analogue de l'ajout d'une clé privée à reconstitution historique).

La méthode qui a fonctionné pour moi a été d'utiliser: $ ssh-agent $ SHELL Ce $ SHELL était le tour de magie dont j'avais besoin pour faire fonctionner l'agent et le maintenir. J'ai trouvé ça quelque part sur le net et ça a mis fin à quelques heures à me battre la tête contre le mur.

Nous avons maintenant l'analogue de pageant en cours d'exécution, un agent sans clé chargée.

La saisie de $ ssh-add ajoutera (par défaut) les clés privées répertoriées dans les fichiers d'identité par défaut dans ~ / .ssh.

Un article web avec beaucoup plus de détails peut être trouvé ici

kovacsbv
la source
0

PPK → OpenSSH RSA avec PuttyGen & Docker.

Clé privée:

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

Clé publique:

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

Voir aussi https://hub.docker.com/r/zinuzoid/puttygen

Uriy MerkUriy
la source