はじめに
最近はTerraformの検証を実施しています。インフラの構築がコードで出来るのは便利ですね。TerraformでAWSにWindowsサーバを構築したのですが、秘密鍵を使用してパスワードが復号化できないことに気づきました。

エラーメッセージの通り、秘密鍵ファイルを開いてみるとヘッダーとフッターが以下のようになっていました。
-----BEGIN OPENSSH PRIVATE KEY-----
・・・
-----END OPENSSH PRIVATE KEY-----
そのため、ヘッダーとフッターを修正しました。
-----BEGIN RSA PRIVATE KEY-----
・・・
-----END RSA PRIVATE KEY-----
しかし、「パスワード復号化時にエラーが発生しました。入力したプライベートキーが正しいかご確認ください。」とエラーになりました。

単純にファイルを修正するだけでは駄目でした。調べてみるとOpenSSLはバージョンによって旧型式の秘密鍵と新形式の秘密鍵が作成されることがわかりました。バージョン7.8以上は新形式になります。管理人の環境ではVer9.1でした。
$ ssh -V
OpenSSH_9.1p1, OpenSSL 1.1.1s 1 Nov 2022
新形式の秘密鍵はAWSでは対応していないので、旧形式に変換する必要があります。
対応方法
秘密鍵を新形式から旧形式に変換するには以下のコマンドを入力します。ファイルは上書きされるので事前にバックアップして作業しましょう。
$ ssh-keygen -p -f private-key.pem -m pem
Key has comment 'root@testpc'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
変換した秘密鍵を使用すると無事、パスワードが復号化されました。

コメント