OpenSSH秘密鍵をSSH2秘密鍵に変換します


29

OpenSSHキーの既存のペアをSSH2(ssh.com形式)のキーペアに変換する方法はありますか?

UPDssh-keygen突然現れたものについていくつかの答えがあるので、私はどこから来たのかを説明します(また、「何を試してみましたか?」の良い答えになります)。

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

言い換えると、ssh-keygen秘密入力キーと公開入力キーに同じキーを返します(元のファイルのハッシュは明らかに異なります。有効な秘密キーと公開キーであることを確認するために2回チェックしました)。ssh-keygenプライベートまたはパブリック入力キーに対してパブリックキーのみを生成するようです。

私はそれを間違っていますか、それは通常の動作ですか?

回答:


43

SSH:OpenSSHをSSH2に変換する、またはその逆」というタイトルのこのチュートリアルでは、探しているものが提供されているようです。

OpenSSHキーをSSH2キーに変換する

ssh-keygenOpenSSH公開キーでOpenSSHバージョンを実行して、リモートマシンのSSH2が必要とする形式に変換します。これは、OpenSSHを実行しているシステムで実行する必要があります。

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

SSH2キーをOpenSSHキーに変換します

ssh-keygenssh2公開キーでOpenSSHバージョンを実行して、OpenSSHが必要とする形式に変換します。これは、OpenSSHを実行しているシステムで実行する必要があります。

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

チュートリアルでは、さまざまな種類のキーを生成する方法と、それらを他の形式にエクスポートする方法の両方を示します。

これを秘密鍵と公開鍵に使用しますか?

マニュアルページによると、答えはイエスです。マニュアルページを見るssh-keygenと、-eスイッチについて次のように記載されています。

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

しかし実際にはssh-keygen、秘密鍵は変換できず、公開鍵のみを変換できるようです。

例えば:

# 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

結果の抽出されたキーを見ると、これが確認できます。

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

少しグーグルで、OpenSSH秘密鍵ファイルをSSHに変換するにはどうすればよいかというタイトルの記事からこの宣伝文句に出会いました。サイトは上下しているように見えましたが、このページのGoogleのキャッシュを見ると、次の宣伝文句が見つかりました。

OpenSSH秘密鍵ファイルをSSH.com秘密鍵ファイルに変換するにはどうすればよいですか?

ほとんどのマニュアルページでできると書かれていても、ssh-keygenプログラムでは実行できません。彼らはあなたが複数の公開鍵を使うようにそれを落胆させます。唯一の問題は、RCFで複数の公開鍵を登録できないことです。

この記事では、PuTTYの puttygenツールを使用してopenssh秘密鍵をssh.com秘密鍵に変換する方法について説明します。注: puttygen WindowsおよびLinuxから実行できます。

「puttygen」を開き、2048ビットのrsa公開/秘密キーペアを生成します。生成されたパスワードを必ず追加してください。公開鍵を「puttystyle.pub」として保存し、秘密鍵を「puttystyle」として保存します。puttyプログラムとSSH.comプログラムは共通の公開鍵形式を共有しますが、puttyプログラムとOpenSSHは異なる公開鍵形式を持っています。これについては後で説明します。両方のputtystyleキーをputtyプログラムにロードできるはずです。ただし、puttyとSSH.comの秘密キーの形式は同じではないため、変換されたファイルを作成する必要があります。変換メニューに移動し、SSH.comキーをエクスポートします。「sshstyle」として保存します。変換メニューに戻り、opensshキーをエクスポートします。「openssh」として保存します。これらの名前は任意であり、独自の名前を選択できます。後でOpenSSHマシンにインストールするために名前を変更する必要があります。下記参照。

上記を考慮しputtygenて、以前に生成されたprivate / public opensshキーペアを使用して、を使用して次のことを解決しました。

# 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

コメントは異なるため、結果ファイルを比較することはできません。したがって、キーの最初の数行を見ると、上記のコマンドが成功したことを示す非常に良い指標です。

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

公開openshキーの比較:

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

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

3
約どのようなプライベートキーは、変換しますか?
ДМИТРИЙМАЛИКОВ

@ДМИТРИЙМАЛИКОВ-なぜそれが重要なのでしょうか?私はそれを試しましたが、秘密鍵または公開鍵のどちらでも機能するようです。
slm

1
有効な秘密鍵が返されるかどうかはわかりません:$> 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 -。元のファイルのハッシュは異なります、obv。秘密または公開入力キーに対して公開キーを返すようです。
ДМИТРИЙМАЛИКОВ

@ДМИТРИЙМАЛИКОВ-回答の更新を参照してください。あなたは正しいことssh-keygenは公開鍵を返していることです。追加の研究に基づいた方法を考え出しました。許容できる場合はLMK。
slm

1
PuTTYgenを属性には注意が必要です:puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}-O出力-の略タイプ-o出力-のためのファイル)。それは生成SSH2 2048ビットのRSA秘密鍵生成のOpenSSH 7.0から秘密鍵と公開鍵を。Win Phone 7.5クライアントでは動作しません(* Tommi PirttiniemiによるSSHクライアント)。しかし、@ДМИТРИЙМАЛИКОВと@slmに感謝します。@Otheus puttygenはputtyArchに付属しています。
tuk0z

1

ssh-keygen秘密鍵をpem形式でエクスポートしませんが、既存のopenssh秘密鍵をpem形式に変換し、元のファイルを上書きします。パスワードを編集するだけです。

~/.ssh/id_rsaファイルをOpenSSH形式からSSH2(pem)形式に変換するコマンドは次のとおりです。

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

次に、プロンプトで(古い)パスフレーズと新しいパスフレーズを入力します。それらは同じでも、両方とも空白でもかまいません。または、-P(古いパスフレーズ)および-N(新しいパスフレーズ)オプションを使用して、コマンドラインでそれらを指定できます。たとえば、パスフレーズが空白で、そのように保持したい場合:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.