ssh-keygenで生成される秘密鍵のヘッダ文字列が変わった話


ものすごく小さなトラブルでしたが、備忘録として書き残しておきます。

起きた問題

AWS OpsWorksにデプロイ用のSSH秘密鍵が登録できない。
OpsWorksに新しいAppを作成して、Application SourceとしてプライベートGitHubリポジトリに配置したコードを使おうとした。
リポジトリURLは [email protected]:<ユーザ名>/<リポジトリ名> な形式、もちろんプライベートリポジトリなのでssh鍵を使った認証が必須です。
そこで

問題の鍵生成コマンド
$ ssh-keygen -t rsa -f deploykey

などと鍵を生成し、
1. 生成された公開鍵(.pubの方)をGitHubリポジトリのデプロイ鍵として登録
2. 生成された秘密鍵(.pubじゃない方)をOpsWorksに登録
していくわけだが、手順2が通らなかった。曰く、赤文字で Please provide a valid SSH key と。

原因と対処法

最近のSSH秘密鍵の形式が変更されたのだが、OpsWorks側がまだこれに対応していないのが原因。

変更後
-----BEGIN OPENSSH PRIVATE KEY-----
XXXXXXXXXXXXXXX.....
変更前
-----BEGIN RSA PRIVATE KEY-----
YYYYYYYYYYYYYYY.....

鍵本体の仕様は変更されていないので、秘密鍵ファイルを開いて手作業でヘッダ部分の OPENSSHRSA に置換してあげれば良い。 だめでした。旧形式で生成する方法は調査中ですが、一旦昔の ssh-keygen が入っているサーバで生成した鍵を使って対策しました。

2019/03/13 追記

@kazukifujii さんのコメントを参考に過去のコマンドを実行したところ、無事に旧形式で Private Key の生成ができました。 @kazukifujii さん、ありがとうございます!

旧形式で鍵生成コマンド
ssh-keygen -t rsa -f deploykey -m pem

これでOpsWorks側の鍵バリデーションが通るようになります。

ちなみに、GitHubのリポジトリに設定したデプロイキーと、手持ちの秘密鍵のペアが正しく動作するか検証するときに下記のコマンドを使いました。参考:git clone 時に秘密鍵を指定する

$ GIT_SSH_COMMAND="ssh -i ~/.ssh/deploykey -F /dev/null" git ls-remote [email protected]:<アカウント>/<プロジェクト> HEAD