OpenSSH özel anahtarını SSH2 özel anahtarına dönüştürme


29

Mevcut OpenSSH anahtar çiftlerini SSH2 (ssh.com formatı) anahtar çiftine dönüştürmenin bir yolu var mı?

UPD : ssh-keygenaniden ortaya çıkması ile ilgili bazı cevaplar olduğu için nereden geldiğimi açıklayacağım (aynı zamanda “ne denedin?” Üzerine güzel bir cevap olacak).

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

Başka bir deyişle, ssh-keygenözel ve genel giriş tuşları için aynı anahtarları döndürür (orijinal dosyaların hashleri ​​açıkça farklıdır, geçerli özel ve genel anahtarlar olduğundan emin olmak için iki kez kontrol ettim). ssh-keygenÖzel veya genel giriş anahtarı için yalnızca ortak anahtar oluşturduğu anlaşılıyor .

Yanlış yapıyorum yoksa normal bir davranış mı?

Yanıtlar:


43

Bu yazının başlığı: SSH: OpenSSH'yi SSH2'ye dönüştürün ve tam tersi , aradığınızı sunar.

OpenSSH anahtarını SSH2 anahtarına dönüştürme

ssh-keygenUzak makinede SSH2'nin ihtiyaç duyduğu formata dönüştürmek için OpenSSH ortak anahtarınızın OpenSSH sürümünü çalıştırın . Bu OpenSSH çalıştıran sistemde yapılmalıdır.

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

SSH2 anahtarını OpenSSH anahtarına dönüştürme

OpenSSH'nin ssh-keygengerektirdiği formata dönüştürmek için ssh2 public anahtarınızın OpenSSH sürümünü çalıştırın . Bunun OpenSSH çalıştıran sistemde yapılması gerekiyor.

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

Eğitimde hem çeşitli anahtar türlerinin nasıl üretileceği, hem de diğer formatlara nasıl aktarılacağı gösterilmektedir.

Bunu özel ve genel anahtarlar için mi kullanıyorsunuz?

Man sayfasına göre cevap evet olur. Bunun için man sayfasına bakarak ssh-keygen, -eanahtar için aşağıdakileri belirtin:

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

Ancak uygulamada ssh-keygen, özel anahtarları, sadece herkese açık olanları dönüştüremediği anlaşılmaktadır .

Örneğin:

# 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

Elde edilen çıkarılan anahtarlara bakmak şunları doğrular:

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

Birazcık googling başlıklı bir makaleden bu bulanıklığa rastladım: OpenSSH Özel anahtar dosyalarını SSH'ye nasıl dönüştürebilirsiniz ? Site yukarı ve aşağı gibi görünüyordu, ancak Google'ın bu sayfa için önbelleğine bakarken aşağıdaki bulanıklığı buldum:

OpenSSH Özel anahtar dosyalarını SSH.com Özel anahtar dosyalarına nasıl dönüştürebilirsiniz?

Çoğu man sayfalarının yapabileceğini söylese bile, ssh-keygen programı tarafından yapılamaz. Birden fazla ortak anahtar kullanmanız için cesaretini kırıyorlar. Tek sorun, RCF'nin birden fazla ortak anahtar kaydetmenize izin vermeyeceğidir.

Makale, PuTTY puttygen aracını kullanarak openssh özel anahtarını ssh.com özel anahtarına dönüştürme yöntemini ele alıyor . NOT: puttygen Windows ve Linux'tan çalıştırılabilir.

'Puttygen'i açın ve bir 2048 bit RSA genel / özel anahtar çifti oluşturun. Oluşturulduktan sonra bir şifre eklediğinizden emin olun. Genel anahtarı "puttystyle.pub" olarak kaydedin ve özel anahtarı "puttystyle" olarak kaydedin. Macun programı ve SSH.com programları ortak bir açık anahtar formatını paylaşır, ancak macun programı ve OpenSSH farklı açık anahtar formatlarına sahiptir. Daha sonra buna geri döneceğiz. Her iki macun stili anahtarını macun programına yükleyebilmelisiniz. Ancak, macun ve SSH.com için özel anahtar biçimleri aynı değildir ve bu nedenle dönüştürülmüş bir dosya oluşturmanız gerekecektir. Dönüşümler menüsüne gidin ve bir SSH.com anahtarı verin. "Sshstyle" olarak kaydedin. Şimdi dönüşümler menüsüne geri dönün ve bir openssh anahtarı verin. "Openssh" olarak kaydedin. Bu isimler keyfidir ve kendi isminizi seçebilirsiniz. Daha sonra bir OpenSSH makinesine kurulum için isimleri değiştirmeniz gerekecektir. Aşağıya bakınız.

Yukarıdakiler göz önüne alındığında, puttygendaha önce oluşturulan özel / genel openssh anahtar çiftini kullanarak aşağıdakileri kullandım :

# 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

Yorum farklıdır, bu nedenle sadece sonuçta elde edilen dosyaları karşılaştıramazsınız, bu nedenle tuşların ilk birkaç satırına bakarsanız, yukarıdaki komutların başarılı olduğuna dair oldukça iyi bir göstergedir.

Public ssh.com anahtarlarının karşılaştırılması:

$ 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

Genel openssh anahtarlarının karşılaştırılması:

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

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

3
ve özel anahtar dönüştürme hakkında ne ?
ДМИТРИЙ МАЛИКОВ

@ ДМИТРИЙМАЛИКОВ - neden bu kadar önemli? Denedim ve özel veya açık anahtarlar için çalışıyor gibi görünüyor.
slm

1
Emin değilim ama benim için geçerli özel anahtarı döndüren: $> 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 -. Orjinal dosyalardaki hashlar farklıdır. Özel veya genel giriş anahtarı için genel anahtarı döndürüyor gibi görünüyor.
ДМИТРИЙ МАЛИКОВ

@ ДМИТРИЙМАЛИКОВ - cevabımdaki güncellemeleri gör. ssh-keygenGenel anahtarların geri verilmesi doğru mu ? Ek araştırmalara dayanan bir yöntem geliştirdim. Eğer kabul edilebilirse LMK.
slm

1
PuTTYgen nitelikleri yanıltıcı olabilir: puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}( -Ooutput- açılımı türü ve -oçıkışı-için dosyanın ). Bu ssh2 özel ve genel anahtarlar üreten bir OpenSSH 7.0 tarafından üretilen rsa 2048 bit özel anahtar. Win Phone 7.5 istemcisi üzerinde çalışmıyor (* Tommi Pirttiniemi tarafından SSH İstemcisi). Ama yine de mükemmel bir cevap için @ ДМИТРИЙМАЛИКОВ ve @slm teşekkürler. @Otheus puttygen puttyArch ile birlikte geliyor .
tuk0z

1

ssh-keygenözel bir anahtarı pem biçiminde dışa aktarmaz ancak mevcut bir openssh özel anahtarını orijinalin üzerine yazarak pem biçimine dönüştürür. Tek yapmanız gereken şifreyi düzenlemek.

~/.ssh/id_rsaDosyanızı OpenSSH formatından SSH2 (pem) formatına dönüştürme komutu :

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

Ardından komut isteminde (eski) ve yeni parolayı girin. Onlar aynı olabilir, hatta her ikisi de boş olabilir. Veya bunları -P(eski parola) ve -N(yeni parola) seçeneklerini kullanarak komut satırında sağlayabilirsiniz . Örneğin, parola boşsa ve onu bu şekilde tutmak istiyorsanız:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.