Ubah OpenSSH private key menjadi SSH2 private key

29

Apakah ada cara untuk mengubah pasangan kunci OpenSSH yang ada ke pasangan kunci SSH2 (format ssh.com)?

UPD : karena ada beberapa jawaban tentang ssh-keygentiba - tiba muncul, saya akan menjelaskan dari mana saya berasal (juga itu akan menjadi jawaban yang bagus pada "apa yang sudah Anda coba?").

$> 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

Dengan kata lain, ssh-keygenmengembalikan kunci yang sama untuk kunci input publik dan privat (hash file asli jelas berbeda, saya sudah memeriksanya dua kali untuk memastikan bahwa itu kunci privat dan publik yang valid). Tampaknya ssh-keygenhanya menghasilkan kunci publik untuk kunci input swasta atau publik.

Saya melakukan kesalahan atau itu adalah perilaku normal?

ДМИТРИЙ МАЛИКОВ
sumber

Jawaban:

43

Tutorial ini berjudul: SSH: Konversi OpenSSH ke SSH2 dan sebaliknya muncul untuk menawarkan apa yang Anda cari.

Ubah kunci OpenSSH menjadi kunci SSH2

Jalankan versi OpenSSH ssh-keygenpada kunci publik OpenSSH Anda untuk mengubahnya menjadi format yang diperlukan oleh SSH2 pada mesin jarak jauh. Ini harus dilakukan pada sistem yang menjalankan OpenSSH.

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

Ubah kunci SSH2 menjadi kunci OpenSSH

Jalankan versi OpenSSH ssh-keygenpada kunci publik ssh2 Anda untuk mengubahnya menjadi format yang diperlukan oleh OpenSSH. Ini perlu dilakukan pada sistem yang menjalankan OpenSSH.

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

Tutorial selanjutnya menunjukkan bagaimana menghasilkan berbagai jenis kunci dan cara mengekspornya ke format lain.

Gunakan ini untuk kunci pribadi & publik?

Menurut halaman manual, jawabannya adalah ya. Melihat halaman manual ssh-keygenuntuknya menyatakan berikut untuk -esakelar:

 -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.

Tetapi dalam praktiknya akan muncul bahwa ssh-keygentidak dapat mengkonversi kunci pribadi, hanya yang publik.

Sebagai contoh:

# 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

Melihat kunci yang diekstrak yang dihasilkan mengkonfirmasi ini:

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

Googling sedikit saya menemukan uraian singkat ini dari sebuah artikel berjudul: Bagaimana Anda mengonversi file kunci OpenSSH Private ke SSH . Situs ini tampaknya naik turun tetapi mencari dalam cache Google untuk halaman ini saya menemukan uraian berikut:

Bagaimana Anda mengonversi file kunci pribadi OpenSSH ke file kunci pribadi SSH.com?

Itu tidak dapat dilakukan oleh program ssh-keygen meskipun kebanyakan halaman manual mengatakan itu bisa. Mereka mencegahnya sehingga Anda akan menggunakan beberapa kunci publik. Satu-satunya masalah adalah bahwa RCF tidak akan memungkinkan Anda untuk mendaftar lebih dari satu kunci publik.

Artikel selanjutnya membahas metode konversi kunci privat openssh ke kunci privat ssh.com melalui penggunaan alat Putty puttygen . CATATAN: puttygen dapat dijalankan dari Windows & Linux.

Buka 'puttygen' dan hasilkan pasangan kunci publik / pribadi 2048 bit. Pastikan Anda menambahkan kata sandi setelah dibuat. Simpan kunci publik sebagai "puttystyle.pub" dan simpan kunci pribadi sebagai "puttystyle". Program dempul dan program SSH.com berbagi format kunci-publik yang umum tetapi program dempul dan OpenSSH memiliki format kunci-publik yang berbeda. Kami akan kembali ke sini, nanti. Anda harus dapat memuat kedua kunci puttystyle ke dalam program dempul. Namun, format kunci pribadi untuk dempul dan SSH.com tidak sama dan Anda harus membuat file yang dikonversi. Buka menu konversi dan ekspor kunci SSH.com. Simpan sebagai "sshstyle". Sekarang kembali ke menu konversi dan ekspor kunci openssh. Simpan sebagai "openssh". Nama-nama ini sewenang-wenang dan Anda dapat memilih sendiri. Anda harus mengubah nama untuk instalasi pada mesin OpenSSH, nanti. Lihat di bawah.

Mengingat hal di atas, saya berhasil menggunakan yang berikut puttygen, menggunakan pasangan kunci openssh pribadi / publik yang dibuat sebelumnya:

# 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

Komentarnya berbeda sehingga Anda tidak bisa hanya membandingkan file yang dihasilkan, jadi jika Anda melihat beberapa baris pertama tombol, itu indikator yang cukup bagus bahwa perintah di atas berhasil.

Perbandingan kunci ssh.com publik:

$ 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

Perbandingan kunci openssh publik:

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

$ cut -c 1-100 newkey.pub_puttygen-openssh 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY
slm
sumber
3
dan bagaimana dengan konversi kunci pribadi ?
ДМИТРИЙ МАЛИКОВ
@ ДМИТРИЙМАЛИКОВ - mengapa itu penting? Saya mencobanya dan tampaknya berfungsi untuk kunci privat atau publik.
slm
1
Tidak yakin bahwa ia mengembalikan kunci privat berlaku bagi saya: $> 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 -. Hash dari file asli berbeda, obv. Tampaknya ia mengembalikan kunci publik untuk kunci input swasta atau publik.
ДМИТРИЙ МАЛИКОВ
@ ДМИТРИЙМАЛИКОВ - lihat pembaruan saya untuk jawabannya. Anda benar yang ssh-keygenmengembalikan kunci publik. Saya telah menemukan metode berdasarkan penelitian tambahan. LMK jika bisa diterima.
slm
1
atribut puttygen bisa rumit: puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}( -Okependekan dari tipe output dan -ountuk file output ). Itu menghasilkan kunci pribadi dan publik ssh2 dari OpenSSH 7.0 yang dihasilkan kunci privat rsa 2048 bit. Tidak berfungsi pada klien Win Phone 7.5 (* Klien SSH oleh Tommi Pirttiniemi). Tetapi terima kasih kepada @ ДМИТРИЙМАЛИКОВ dan @slm untuk jawaban yang bagus pula. @Otheus puttygen hadir puttydi Arch.
tuk0z
1

ssh-keygentidak akan mengekspor kunci pribadi dalam format pem, tetapi itu akan mengonversi kunci priv openssh yang ada ke format pem, menimpa yang asli. Yang harus Anda lakukan adalah mengedit kata sandi.

Perintah untuk mengkonversi ~/.ssh/id_rsafile Anda dari format OpenSSH ke format SSH2 (pem) adalah:

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

Kemudian berikan frasa sandi (lama) dan baru saat diminta. Mereka bisa sama, atau bahkan keduanya kosong. Atau Anda dapat menyediakannya di baris perintah menggunakan opsi -P(frasa sandi lama) dan -N(frasa sandi baru). Misalnya, jika frasa sandi kosong, dan Anda ingin tetap seperti itu:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
pengguna43957
sumber