Come recuperare la chiave pubblica da una chiave privata SSH?


444

Una chiave privata SSH generata da ssh-keygencontiene una parte di chiave pubblica. Come recuperare questa chiave pubblica dalla chiave privata? Ho perso la mia chiave pubblica e devo inserire il contenuto di questa chiave pubblica nel authorized_keysfile server e non voglio creare una nuova coppia di chiavi.

In alternativa: come posso creare il id_rsa.pubfile da un id_rsafile?


pbcopy > ~/.ssh/id_rsa.puboops.
Nick T

@NickT - pbcopy è un comando MacOSX. Inoltre, è inutile se hai riavviato, disconnesso o copiato qualsiasi altra cosa negli appunti.
jsnfwlr

Risposte:


681

Ho trovato la risposta su Server Fault: creare una chiave SSH pubblica dalla chiave privata?

L'opzione -ygenera la chiave pubblica:

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

Come nota a margine, il commento della chiave pubblica viene perso. Ho avuto un sito che ha richiesto il commento (Launchpad?), Quindi è necessario modificare ~/.ssh/id_rsa.pube aggiungere un commento alla prima riga con uno spazio tra il commento e i dati chiave. Di seguito viene mostrata una chiave pubblica di esempio troncata.

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

Per le chiavi aggiunte all'agente SSH (un programma che viene eseguito in background ed evita la necessità di reinserire più volte la passphrase del file di chiavi), è possibile utilizzare il ssh-add -Lcomando per elencare le chiavi pubbliche per le chiavi che sono state aggiunte l'agente (via ssh-add -l). Ciò è utile quando la chiave SSH è memorizzata su una smart card (e non è possibile accedere al file della chiave privata).


1
Si noti che il file della chiave privata ~/.ssh/id_rsadeve essere limitato al nome utente. utilizzare $ sudo chmod 600 ~/.ssh/id_rsae immettere le credenziali di root per limitarlo, quindi è possibile generare il file della chiave pubblica. Altrimenti riceverai un avviso file di chiave privata senza restrizioni.
Mark Mikofski,

12
@MarkMikofski Non è necessario sudo, dovresti possedere già la chiave privata. Altrimenti non puoi leggerlo in primo luogo.
Lekensteyn,

7
@Lekensteyn grazie, ovviamente hai ragione !. Inoltre 400è consigliato poiché non è necessario scrivere per digitare il file della chiave privata. Il comando corretto dovrebbe essere$ chmod 400 ~/.ssh/id_rsa
Mark Mikofski,

Il commento sulla chiave privata viene perso. Vedere stackoverflow.com/questions/38290929/...
weberjn

1
@weberjn La chiave privata ( id_rsafile) non ha un commento, ma il commento all'interno del file della chiave pubblica ( id_rsa.pub) viene perso.
Lekensteyn,

14

Questa è una soluzione specifica per gli utenti che utilizzano Windows per SSH nei propri computer remoti, comprese le immagini cloud su Amazon AWS e GCE.

(Clausola di esclusione della responsabilità)

Di recente ho usato questa soluzione per accedere in remoto a nuove immagini VM distribuite su GCE.


Strumenti utilizzati:

  1. puttygen
  2. WinSCP

I passaggi per eseguire:

  1. Genera una coppia di chiavi pubblica / privata usando puttygen.
  2. Carica una chiave pubblica sul tuo server nel cloud o nella posizione remota.

Descrizione (come farlo):

  1. Generare una chiave / coppia o utilizzare una chiave privata esistente:

    Se hai una chiave privata:

    Apri puttygen, premi il pulsante di caricamento e seleziona il file della tua chiave privata (* .pem).

    Se non si dispone di una chiave privata:

    • Open puttygen,
    • Seleziona il tipo di chiave desiderato SSH2 DSA (puoi utilizzare RSA o DSA) nella sezione Parametri ... ed è importante lasciare vuoto il campo passphrase,
    • Premere genera e seguire le istruzioni per generare la coppia di chiavi (pubblica / privata).

    Foto di esempio di generazione chiave

  2. Crea un nuovo file 'authorized_keys' (con Blocco note):

    Copia i dati della tua chiave pubblica dalla sezione "Chiave pubblica per incollare nel file OpenSSH authorized_keys" del generatore di chiavi PuTTY e incolla i dati della chiave nel file "authorized_keys".

    Assicurati che ci sia solo una riga di testo in questo file.

  3. Carica la chiave su un server Linux:

    • Apri WinSCP,
    • Seleziona il protocollo del file SFTP e accedi con le tue credenziali SSH.
    • In caso di successo, vedi la struttura della home directory sul tuo computer remoto.

    Carica il file authorized_keys nella home directory sul computer remoto.

  4. Imposta le autorizzazioni appropriate:

    Crea una .sshdirectory (se non esiste)

    Copia il authorized_keysfile nella directory .ssh (sostituirà qualsiasi authorized_keysfile esistente ; prendine nota).

    Se il file esiste, è sufficiente aggiungere il contenuto di questo file al file esistente.

    Esegui i comandi per impostare le autorizzazioni:

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

Ora sarai in grado di accedere a un computer remoto senza inserire le credenziali ogni volta.

Ulteriori letture:

  1. Generazione e caricamento di chiavi SSH in Windows

  2. Autenticazione senza password tramite OpenSSH Key, certificati .pem e .pub


Se la tua home directory è codificata, esegui questa operazione: askubuntu.com/questions/439184/…
devprashant

2
sebbene la tua risposta non sia realmente pertinente alla domanda, io la voto per il tuo entusiasmo.
Truong Nguyen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.