パスフレーズ付き SSH 秘密鍵の暗号化を解く方法

2017.12.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

EC2 上に Windows インスタンスを起動した場合、ログインパスワードを知るためには、起動時に指定したキーペアのうち「プライベートキー(秘密鍵)」が必要になります。

さてここで、下記のような場合には少し困ったことになりがちです。

  • 該当インスタンス起動時に指定したキーペアが、macOS や Linux などの上で ssh-keygen コマンドで生成された公開鍵(id_rsa.pub)をインポートしたものだった場合

ssh-keygen コマンドで SSH 公開鍵・秘密鍵を生成するとき、通常だとパスフレーズを設定すると思います1

ただしそのようにして生成された秘密鍵は、暗号化された状態で保存されることになります。
中身を見てみると、下記のような感じになっているかと思います。

$ head -3 ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,EXAMPLE0EXAMPLE0EXAMPLE0EXAMPLE0
$

しかしながら、起動した Windows インスタンスのログインパスワードを AWS マネジメントコンソール上から取得しようとした場合、この状態の秘密鍵を指定するとエラーになってしまいます。

もちろんマネジメントコンソール上で作成したキーペアの .pem ファイルをダウンロードしておいて、それを使った場合には問題はないのですが。。。この場合、どうすれば良いでしょう?

openssl コマンドで解錠する

答えは簡単で、openssl コマンドにて下記のようにすれば、暗号化を解除した状態の秘密鍵が手に入ります(ターミナルにそのまま出力されます)。

$ openssl rsa -outform pem < ~/.ssh/id_rsa
Enter pass phrase: 
:

Enter pass phrase」で鍵のパスフレーズを入力して下さい。

-outform pem というオプションは openssl コマンドのデフォルト動作なので、省略も可能です。

また、どうせ出力された内容をコピペするのであれば、macOS の場合その場でクリップボードに放り込むことも可能ですね。一時的とはいえターミナル上に表示されることもないので、セキュリティ上もこちらのほうが比較的好ましいでしょう。

$ openssl rsa -outform pem < ~/.ssh/id_rsa | pbcopy

もちろん、一時的にファイルに保存してアップロードする方法も鉄板です(用が済んだらファイルを削除することを忘れないように!)。

どうせ初期パスワードはすぐに変更するのだから、Windows インスタンス構築用に専用のキーペアを用意しておく・毎回作成する、とすることが多いかなとも思いますが、「こういったことが出来る」と知っておくのも損はないかと思いました。

参考

脚注


  1. しますよね?