OpenSSH新旧の違いで接続につまづいた話

Y
2022-09-20
2022-09-20

初めに

SSH接続して作業することはありますか。
テスト環境のサーバを構築することが多々あるのですが、
過去に
SSH接続を行おうとしていたところ、OpenSSHで作った鍵の形式が違うことにより、
ハマってしまったことがありましたので記事にしてみました。

事象

・テスト環境にて秘密鍵/公開鍵を作成している。
・作成した鍵でテスト環境のサーバにsshでログインができない。
・テストサーバに置かれている公開鍵(authorized_keys)の権限や場所は正しい状態
・あるSSHクライアントからだと接続できないが、別のSSHクライアントだと接続できる。

結論

OpenSSH7.8以降で鍵を作成していましたが、
本バージョンからOpenSSHの形式がデフォルトとなり、秘密鍵のヘッダの形式が大きく変わったことが原因でした。
形式が変わったことによりSSHクライアントが対応しておらず上手く接続できない状態となっていたようです。

OpenSSH7.8以前で生成した秘密鍵は「-----BEGIN RSA PRIVATE KEY-----」で始まる。

ssh-keygen -f ~/.ssh/id_rsa -t rsa
# ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,XXXXXXXXXXXXXXXXXXXXXXXXXXX
~
~
~
-----END RSA PRIVATE KEY-----

OpenSSH7.8以降で生成した秘密鍵は「-----BEGIN OPENSSH PRIVATE KEY-----」で始まる

ssh-keygen -f ~/.ssh/id_rsa -t rsa
# ~/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
~
~
~
-----END OPENSSH PRIVATE KEY-----

以下のように「-m PEM」オプションをつけると旧型式で鍵が出力されます。
ssh-keygen -f ~/.ssh/id_rsa -t rsa -m PEM


ssh-keygen -f ~/.ssh/id_rsa -t rsa -m PEM
# ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,XXXXXXXXXXXXXXXXXXXXXXXXXXX
~
~
~
-----END RSA PRIVATE KEY-----


あまりないケースだとは思いますが、旧形式の秘密鍵を作成する必要がある場合には、上記のようにオプションをつけて作成してみてください。