まとめ
opensshのバージョン7.8以降で生成した鍵は後方互換性がない
経緯
Dockerコンテナ上でgithubからcloneを実行したかった。
SSH鍵をコンテナ毎に生成するのは現実的ではないので、
ホストOSのSSH鍵(github登録済)を使おうと思った
何が起きたか
docker-composeとDockerfileを記述して、
コンテナ上で鍵ファイルを閲覧できるところまでは確認。
任意のディレクトリでclone実行したところcloneに失敗
生成されたキーがおかしい?
ゲストOS上で直接ssh-keygenで生成したキーは使用できるか確認したところ特に問題なくcloneに成功。
ホスト上で作成した鍵がおかしい?と思ったが、ホスト上でもcloneコマンドは成功している。
両者のid_rsaをlessで確認したところ、下記の違いが確認された。
ホスト
-----BEGIN OPENSSH PRIVATE KEY-----
ゲスト
-----BEGIN RSA PRIVATE KEY-----
ムムム、ヘッダの内容が若干違う?
OpenSSHの確認
opensshのバージョンは、、、
ホスト
OpenSSH_7.9p1, LibreSSL 2.7.3
ゲスト
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
それっぽい違いがあるぞ、、、?!
調べたらすぐこんな記事が見つかりました。
https://dev.classmethod.jp/server-side/network/openssh78_potentially_incompatible_changes/
クラスメソッドさんありがとうございます!
openssh7.8以降を利用している際に後方互換性のあるキーを作成したい場合は-m PEM
を付与する
ssh-keygen -m PEM
生成されたキーのヘッダを確認したところ旧バージョンの形式になってること確認
cloneも無事完了
ダイナミックな変更で驚いたが、オプションで解決できてよかったよかった。