Converti la chiave privata OpenSSH in chiave privata SSH2


29

C'è un modo per convertire una coppia esistente di chiavi OpenSSH nella coppia di chiavi SSH2 (formato ssh.com)?

UPD : dal momento che ci sono alcune risposte sull'improvviso ssh-keygenapparso, spiegherò da dove vengo (inoltre sarà una bella risposta su "cosa hai provato?").

$> diff --report-identical-files <(ssh-keygen -e -f ~/.ssh/id_dsa) <(ssh-keygen -e -f ~/.ssh/id_dsa.pub)
Files /tmp/zshAGGWAK and /tmp/zshPZiIr6 are identical

In altre parole, ssh-keygenrestituisce le stesse chiavi per le chiavi di input pubbliche e private (gli hash dei file originali sono ovviamente diversi, li ho controllati due volte per assicurarsi che siano chiavi private e pubbliche valide). Sembra che ssh-keygengeneri solo chiave pubblica per chiave di input privata o pubblica.

Sto sbagliando o è un comportamento normale?

Risposte:


43

Questo tutorial intitolato: SSH: Converti OpenSSH in SSH2 e viceversa sembra offrire ciò che stai cercando.

Converti chiave OpenSSH in chiave SSH2

Esegui la versione OpenSSH della ssh-keygentua chiave pubblica OpenSSH per convertirla nel formato richiesto da SSH2 sul computer remoto. Questo deve essere fatto sul sistema che esegue OpenSSH.

$ ssh-keygen -e -f ~/.ssh/id_dsa.pub > ~/.ssh/id_dsa_ssh2.pub

Convertire la chiave SSH2 in chiave OpenSSH

Esegui la versione OpenSSH della ssh-keygentua chiave pubblica ssh2 per convertirla nel formato richiesto da OpenSSH. Questo deve essere fatto sul sistema che esegue OpenSSH.

$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > ~/.ssh/id_dsa_1024_a_openssh.pub

Il tutorial prosegue per mostrare come sia generare i vari tipi di chiavi sia come esportarli in altri formati.

Usalo per chiavi private e pubbliche?

Secondo la pagina man, la risposta sarebbe un sì. Guardando la pagina man per ssh-keygenesso si afferma quanto segue per lo -eswitch:

 -e    This option will read a private or public OpenSSH key file and print
       the key in RFC 4716 SSH Public Key File Format to stdout.  This option
       allows exporting keys for use by several commercial SSH implementations.

Ma in pratica sembrerebbe che ssh-keygennon sia possibile convertire le chiavi private, ma solo quelle pubbliche.

Per esempio:

# Make a new RSA key-pair
$ ssh-keygen -t rsa -f newkey

# attempt to extract the private key
$ ssh-keygen -e -f newkey > newkey_e

# attempt to extract the public key
$ ssh-keygen -e -f newkey.pub > newkey.pub_e

# Notice the supposed extracted private key (newkey_e) and the corresponding extracted public key (newkey.pub_e) have identical `md5sum`'s.
$ for i in *;do md5sum $i;done
d1bd1c12c4a2b9fee4b5f8f83150cf1a  newkey
8b67a7be646918afc7a041119e863be5  newkey_e
13947789d5dcc5322768bd8a2d3f562a  newkey.pub
8b67a7be646918afc7a041119e863be5  newkey.pub_e

Osservando le chiavi estratte risultanti si conferma questo:

$ grep BEGIN newkey_e newkey.pub_e 
newkey_e:---- BEGIN SSH2 PUBLIC KEY ----
newkey.pub_e:---- BEGIN SSH2 PUBLIC KEY ----

Googling un po 'mi sono imbattuto in questo frastuono da un articolo intitolato: Come si convertono i file della chiave privata OpenSSH in SSH . Il sito sembrava essere su e giù ma guardando nella cache di Google per questa pagina ho trovato il seguente blurb:

Come si convertono i file della chiave privata OpenSSH in file della chiave privata SSH.com?

Non può essere fatto dal programma ssh-keygen anche se la maggior parte delle pagine man lo dice. Lo scoraggiano in modo da utilizzare più chiavi pubbliche. L'unico problema è che RCF non ti consentirà di registrare più di una chiave pubblica.

L'articolo prosegue con un metodo per convertire una chiave privata di openssh in una chiave privata di ssh.com mediante l'uso dello strumento PuTTY puttygen . NOTA: puttygen può essere eseguito da Windows e Linux.

Apri 'puttygen' e genera una coppia di chiavi pubblica / privata a 2048 bit rsa. Assicurati di aggiungere una password dopo che è stata generata. Salvare la chiave pubblica come "puttystyle.pub" e salvare la chiave privata come "puttystyle". Il programma putty e i programmi SSH.com condividono un formato comune di chiave pubblica ma il programma putty e OpenSSH hanno diversi formati di chiave pubblica. Torneremo su questo, più tardi. Dovresti essere in grado di caricare entrambe le chiavi puttystyle nel programma putty. Tuttavia, i formati della chiave privata per putty e SSH.com non sono gli stessi e quindi dovrai creare un file convertito. Vai al menu delle conversioni ed esporta una chiave SSH.com. Salvalo come "sshstyle". Ora torna al menu delle conversioni ed esporta una chiave openssh. Salvalo come "openssh". Questi nomi sono arbitrari e puoi scegliere il tuo. Dovrai cambiare i nomi per l'installazione su una macchina OpenSSH, in seguito. Vedi sotto.

Alla luce di quanto sopra ho elaborato quanto segue usando puttygen, usando la nostra coppia di chiavi openssh privata / pubblica precedentemente generata:

# generate ssh.com private key from private openssh key
$ puttygen newkey -O private-sshcom -o newkey.puttygen-sshcom

# generate ssh.com public key from private openssh key
$ puttygen newkey -O public -o newkey.pub_puttygen-sshcom

# generate openssh public key from private openssh key (for confirmation)
$ puttygen newkey -O public-openssh -o newkey.pub_puttygen-openssh

Il commento è diverso, quindi non puoi semplicemente confrontare i file risultanti, quindi se guardi le prime righe dei tasti, questo è un buon indicatore che i comandi sopra hanno avuto successo.

Confronto tra le chiavi pubbliche di ssh.com:

$ tail -n +3 newkey.pub_e | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

$ tail -n +3 newkey.pub_puttygen-sshcom | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

Confronto tra le chiavi pubbliche di openssh:

$ cut -c 1-100 newkey.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

$ cut -c 1-100 newkey.pub_puttygen-openssh 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

3
e che dire della conversione della chiave privata ?
ДМИТРИЙ МАЛИКОВ,

@ ДМИТРИЙМАЛИКОВ - perché dovrebbe importare? L'ho provato e sembra funzionare per le chiavi private o pubbliche.
slm

1
Non sono sicuro che restituisce la chiave privata valida per me: $> a="$(ssh-keygen -e -f ~/.ssh/id_rsa)m"; b="$(ssh-keygen -e -f ~/.ssh/id_rsa.pub)m"; md5sum <<< $a; md5sum <<< $b ce615aa3e39e274d0bd81064399cedf8 - ce615aa3e39e274d0bd81064399cedf8 -. Gli hash dei file originali sono diversi, ovv. Sembra che restituisca la chiave pubblica per la chiave di input privata o pubblica.
ДМИТРИЙ МАЛИКОВ,

@ ДМИТРИЙМАЛИКОВ - guarda i miei aggiornamenti alla risposta. Hai ragione che ssh-keygensta restituendo le chiavi pubbliche. Ho elaborato un metodo basato su ulteriori ricerche. LMK se è accettabile.
slm

1
Gli attributi puttygen possono essere complicati: puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}( -Osta per output- type e -ooutput- file ). Ciò genera chiavi private e pubbliche ssh2 da una chiave privata rsa 2048 bit generata da OpenSSH 7.0. Non funziona sul client Win Phone 7.5 (* Il client SSH di Tommi Pirttiniemi). Ma grazie a @ ДМИТРИЙМАЛИКОВ e @slm per comunque un'ottima risposta. @Otheus puttygen arriva con puttyArch.
tuk0z,

1

ssh-keygennon esporterà una chiave privata in formato pem, ma convertirà una chiave privata openssh esistente in formato pem, sovrascrivendo l'originale. Tutto quello che devi fare è modificare la password.

Il comando per convertire il tuo ~/.ssh/id_rsafile dal formato OpenSSH al formato SSH2 (pem) è:

ssh-keygen -p -f ~/.ssh/id_rsa -m pem

Quindi fornire la (vecchia) e la nuova passphrase al prompt. Possono essere uguali o addirittura entrambi vuoti. Oppure puoi fornirli dalla riga di comando usando le opzioni -P(passphrase precedente) e -N(new passphrase). Ad esempio, se la passphrase è vuota e si desidera mantenerla in questo modo:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
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.