2010-02-08 15 views
366

ho generato coppie di chiavi utilizzando PuttyGen e stato il login con Pageant, in modo che devo inserire il mio pass-phrase solo una volta all'avvio del sistema.Come convertire coppie di chiavi SSH generate utilizzando PuTTYgen (Windows) in coppie di chiavi utilizzate da ssh-agent e keychain (Linux)

Come faccio a raggiungere questo obiettivo in Linux? Ho sentito parlare di keychain ma ho sentito che utilizza un diverso formato di coppia di chiavi - Io non voglio cambiare i miei tasti Windows e sarebbe bello se potessi senza soluzione di continuità collegare nello stesso modo sia in Windows e Linux.

+0

ci shouldn Non ci sono problemi nell'usare le chiavi di Linux ... basta copiarle e aggiungere il pub alle chiavi autorizzate ... anche se devo ammettere che non capisco del tutto la tua domanda. – ranman

+14

No, c'è - so che i formati chiave usati da PuttyGen e ssh-agent sono diversi, e devono essere convertiti in modo esplicito - vedi la risposta dettagliata di Kaleb qui sotto. – TCSGrad

risposta

574

puttygen supporta l'esportazione la chiave privata in un formato compatibile con OpenSSH. È quindi possibile utilizzare gli strumenti OpenSSH per ricreare la chiave pubblica.

  1. Aprire PuTTYgen
  2. Fare clic su Carica
  3. Caricare il privato chiave
  4. Vai a Conversions->Export OpenSSH ed esportare la vostra chiave
  5. Copiare la chiave privata privato a ~/.ssh/id_dsa (o id_rsa).
  6. creare la versione RFC 4716 della chiave pubblica utilizzando ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub 
    
  7. Convertire la versione RFC 4716 della chiave pubblica al formato OpenSSH:

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

Vedi this e this per ulteriori informazioni.

+9

Per coloro che ottengono 'È necessario che i tuoi file di chiave privata NON siano accessibili da altri' errori come se avessi eseguito 'cd ~/.ssh' e' chmod 700 id_rsa' – expert

+47

Vuoi dire ** chmod 600 id_rsa **. Il file non deve essere necessariamente eseguibile. :) – sig11

+1

Questa risposta è stata la chiave per ottenere ssh dalla riga di comando di Windows utilizzando chiavi senza password per me (in particolare per l'accesso git). Mi avrebbe risparmiato * ore * di dolore se l'avessi visto prima! Grazie! – cori

8

E 'probabilmente più facile creare le chiavi sotto linux e utilizzare PuTTYgen per convertire le chiavi in ​​formato PuTTY.

PuTTY Faq: A.2.2

+14

Sfortunatamente non è un'opzione se hai le chiavi esistenti che devi usare. – expert

126

Se hai a disposizione solo una chiave pubblica da un utente in formato stile PuTTY, è possibile convertire in formato OpenSSH standard come così:

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

Fonte: http://www.treslervania.com/node/408

+4

poiché treslervania.com non sta più servendo un blog, ecco la via di ritorno della copia della macchina: https://web.archive.org/web/20120414040727/http://www.treslervania.com/node/408 –

+2

Inoltre, tu potrebbe voler copiare il commento dell'utente dalla riga 'Comment:' e incollarlo sulla stessa riga della nuova chiave, separata con uno spazio. Non so perché ssh-keygen non lo farà di default. – Tobia

+0

Questo mi dà un errore di: 'decodifica blob non riuscita: formato non valido ' –

6

Penso che quello che TCSgrad Stavo provando a chiedere (alcuni anni fa) come fare in modo che Linux si comportasse come fa la sua macchina Windows. Cioè, c'è un agente (spettacolo), che contiene una copia decodificata di una chiave privata in modo che la passphrase ha solo bisogno di essere messo in una volta. Quindi, il client ssh, stucco, può accedere alle macchine dove la sua chiave pubblica è elencato come "autorizzato", senza una richiesta di password.

L'analogo di questo è che Linux, agisce come un client SSH, ha un agente in possesso di un chiave privata decifrato in modo che quando tipi TCSgrad "host ssh" il comando ssh otterrà la sua chiave privata e andare senza che venga richiesto per una password. l'host, naturalmente, deve tenere la chiave pubblica in ~/.ssh/authorized_keys.

L'analogo Linux a questo scenario viene eseguita utilizzando ssh-agent (l'analogo corteo) e ssh-add (l'analogo per l'aggiunta di una chiave privata per Pageant).

Il metodo che ha funzionato per me era quello di utilizzare: $ ssh-agent $ SHELL Quel $ SHELL era il trucco magico di cui avevo bisogno per far funzionare l'agente e rimanere in esecuzione. L'ho trovato da qualche parte sulla rete e si è conclusa poche ore prima di picchiare la testa contro il muro.

Ora abbiamo l'analogo del pageant in esecuzione, un agente senza chiavi caricate.

Digitando $ ssh-add da solo aggiungerà (per impostazione predefinita) le chiavi private elencati nei file di identità predefinite in ~/.ssh.

Un articolo web con molti più dettagli possono essere trovati here

41

In alternativa, se si vuole afferrare le chiavi pubbliche e private da un file chiave PuTTY formattato è possibile utilizzare puttygen su sistemi * nix. Per la maggior parte dei sistemi basati su apt puttygen fa parte del pacchetto putty-tools.

Emissione di una chiave privata da un file di chiavi PuTTY formattato:

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

Per la chiave pubblica:

$ puttygen keyfile.pem -L

+0

Se per qualche motivo si DEVE farlo in una finestra di Windows (non è possibile trasferire tutte le chiavi in ​​modo sicuro a * nix) e avere così tante chiavi utilizzando la GUI è ingombrante, prova a compilare la sorgente Unix sotto Cygwin. Quel puttygen.exe ti darà la "modalità batch" della CLI come descritto sopra. –

+2

OSX: 'brew instal putty' –

+0

Che dovrebbe essere invertito:' puttygen inppk -O private-openssh -o outpem' e 'puttygen inppk -L' (o' ssh-keygen -y -f outpem') –

12

Recentemente ho avuto questo problema come mi muovevo da mastice per Linux a Remmina per Linux. Quindi ho un sacco di file PPK per Putty nella mia directory .putty poiché li uso da 8 anni. Per questo ho utilizzato un semplice comando for per shell bash di fare tutti i file:

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; 

molto veloce e al punto, ha ottenuto il lavoro fatto per tutti i file che stucco aveva. Se trova una chiave con una password, si interromperà e chiederà prima la password per quella chiave e poi continuerà.

+2

Per ppl pigro come me, ecco copia-incolla per ottenere puttygen su ubuntu: sudo apt-get install putty-tools –

110

versioni più recenti di PuTTYgen (il mio è 0,64) sono in grado di mostrare la chiave pubblica OpenSSH per essere incollato nel sistema linux nel file .ssh/authorized_keys, come mostrato nella seguente immagine:

enter image description here

+8

Sì! Questo è in definitiva il modo più veloce e semplice :) – LihO

+3

Questa dovrebbe essere la risposta migliore al giorno d'oggi. –

+4

Questa risposta spiega come impostare l'autenticazione della chiave su un telecomando che utilizza il formato OpenSSH. Ma per usare una chiave generata da Putty su un client Linux * *, questa risposta è insufficiente. Ho seguito la risposta accettata e ha funzionato splendidamente. – wberry

8
sudo apt-get install putty 

Questo installerà automaticamente lo strumento puttygen.

Ora per convertire il file PPK da utilizzare con il comando SSH eseguire quanto segue nel terminale

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

Quindi, è possibile collegarsi tramite SSH con:

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

+0

Questo non mostra molto di più di ciò che è già nella [risposta di @John Jawed] (http://stackoverflow.com/a/16548452/850848) –

+0

Gli argomenti spiegano cosa rappresentano. +1 – danronmoon