Comment récupérer la clé publique d'une clé privée SSH?

445

Une clé privée SSH telle que générée par ssh-keygencontient une partie de clé publique. Comment puis-je récupérer cette clé publique à partir de la clé privée? J'ai perdu ma clé publique et je dois mettre le contenu de cette clé publique dans le authorized_keysfichier des serveurs . Je ne souhaite pas créer de nouvelle paire de clés.

Autrement dit: comment créer le id_rsa.pubfichier à partir d'un id_rsafichier?

Lekensteyn
la source
pbcopy > ~/.ssh/id_rsa.pubOops.
Nick T
@ NickT - pbcopy est une commande MacOSX. De plus, il est inutile si vous avez redémarré, déconnecté ou copié autre chose dans le Presse-papiers.
jsnfwlr

Réponses:

683

J'ai trouvé la réponse sur Server Fault: créer une clé publique SSH à partir de la clé privée?

L'option -yaffiche la clé publique:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

En remarque, le commentaire de la clé publique est perdu. J'ai eu un site qui nécessitait le commentaire (Launchpad?), Vous devez donc éditer ~/.ssh/id_rsa.pubet ajouter un commentaire à la première ligne avec un espace entre le commentaire et les données clés. Un exemple de clé publique est tronqué ci-dessous.

ssh-rsa AAAA..../VqDjtS5 ubuntu@ubuntu

Pour les clés ajoutées à l'agent SSH (un programme qui s'exécute en arrière-plan et évite de ressaisir la phrase secrète du fichier de clés), vous pouvez utiliser la ssh-add -Lcommande pour répertorier les clés publiques des clés ajoutées. l'agent (via ssh-add -l). Ceci est utile lorsque la clé SSH est stockée sur une carte à puce (et que l'accès au fichier de clé privée n'est pas possible).

Lekensteyn
la source
1
Veuillez noter que votre fichier de clé privée ~/.ssh/id_rsadoit être limité à votre nom d'utilisateur. utilisez $ sudo chmod 600 ~/.ssh/id_rsaet entrez vos identifiants racine pour le restreindre, vous pouvez alors sortir le fichier de clé publique. Sinon, vous recevrez un avertissement illimité sur le fichier de clé privée.
Mark Mikofski
12
@MarkMikofski Pas besoin de sudo, vous êtes déjà censé posséder la clé privée. Sinon, vous ne pouvez pas le lire en premier lieu.
Lekensteyn
7
@ Lekensteyn merci, bien sûr que vous avez raison !. Aussi 400est recommandé depuis pas besoin d'écrire pour taper le fichier de clé privée. La commande corrigée devrait être$ chmod 400 ~/.ssh/id_rsa
Mark Mikofski
Le commentaire de clé privée est perdu. Voir stackoverflow.com/questions/38290929/…
weberjn
1
@weberjn La clé privée ( id_rsafichier) n'a pas de commentaire, mais le commentaire dans le fichier de clé publique ( id_rsa.pub) est perdu.
Lekensteyn
14

Cette solution est spécialement conçue pour les utilisateurs utilisant Windows to SSH sur leurs machines distantes, y compris les images en nuage sur Amazon AWS et GCE.

(Avertissement)

J'ai récemment utilisé cette solution pour vous connecter à distance à de nouvelles images de VM déployées sur GCE.


Les outils utilisés:

  1. puttygen
  2. WinSCP

Étapes à suivre:

  1. Générez une paire de clés publique / privée à l'aide de puttygen.
  2. Téléchargez une clé publique sur votre serveur dans le cloud ou à distance.

Description (comment le faire):

  1. Générez une clé / paire ou utilisez une clé privée existante:

    Si vous avez une clé privée:

    Ouvrez puttygen, appuyez sur le bouton de chargement et sélectionnez votre fichier de clé privée (* .pem).

    Si vous n'avez pas de clé privée:

    • Ouvrez mastic,
    • Sélectionnez le type de clé SSH2 DSA souhaité (vous pouvez utiliser RSA ou DSA) dans la section Paramètres ... et il est important de laisser le champ de phrase secrète vide.
    • Appuyez sur Générer et suivez les instructions pour générer une paire de clés (publique / privée).

    Exemple de génération de clé

  2. Créez un nouveau fichier 'authorised_keys' (avec Notepad):

    Copiez vos données de clé publique à partir de la section "Clé publique pour le collage dans le fichier OpenSSH allowed_keys" du générateur de clé PuTTY, puis collez les données de clé dans le fichier "authorised_keys".

    Assurez-vous qu'il n'y a qu'une seule ligne de texte dans ce fichier.

  3. Téléchargez la clé sur un serveur Linux:

    • Ouvrez WinSCP,
    • Sélectionnez le protocole de fichier SFTP et connectez-vous avec vos informations d'identification SSH.
    • En cas de succès, vous voyez la structure du répertoire de base sur votre ordinateur distant.

    Téléchargez le fichier allowed_keys dans le répertoire de base de la machine distante.

  4. Définissez les autorisations appropriées:

    Faire un .sshrépertoire (s'il n'existe pas)

    Copiez le authorized_keysfichier dans le répertoire .ssh (cela remplacera tout authorized_keysfichier existant ; prenez-en note).

    Si le fichier existe, ajoutez simplement le contenu de ce fichier au fichier existant.

    Exécutez les commandes pour définir les autorisations:

    sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
    

Maintenant, vous pourrez ssh sur une machine distante sans entrer les informations d'identification à chaque fois.

Lectures complémentaires:

  1. Génération et téléchargement de clés SSH sous Windows

  2. Authentification sans mot de passe avec OpenSSH Key, certificats .pem et .pub

devprashant
la source
Si votre répertoire personnel est crypté, procédez comme suit
devprashant
2
bien que votre réponse ne soit pas vraiment pertinente pour la question, je la vote pour votre enthousiasme.
Truong Nguyen