パスフレーズ付き SSH 秘密鍵の暗号化を解く方法
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 インスタンス構築用に専用のキーペアを用意しておく・毎回作成する、とすることが多いかなとも思いますが、「こういったことが出来る」と知っておくのも損はないかと思いました。
参考
脚注
- しますよね? ↩