サーバにsshすると「key_load_public: invalid format」という警告が表示される

ども、i9qqiです。
sshでログインする際に「key_load_public: invalid format」という警告が表示されるようになったので、その対処方法を書いていきます。

概要

接続元サーバ(abc)から接続先サーバ(xyz)にsshすると「key_load_public: invalid format」という警告が表示される。
ただし、接続先サーバには問題なくログインできる。

[i9qqi@abc ~]$ ssh 192.168.xx.yy
key_load_public: invalid format
Enter passphrase for key '/home/i9qqi/.ssh/id_rsa':
Last login: Fri Oct 16 20:57:39 2020 from 192.168.aa.bb
[i9qqi@xyz ~]$

背景

sshコマンドを実行する接続元サーバを「」接続元サーバにリプレースした。
接続元サーバの.ssh/以下のファイルを新接続元サーバに丸々コピーしたところ上記のような警告が表示されるようになった。
sshのバージョンは以下の通り。

接続元
$ ssh -V
OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

新接続元
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

ファイル構成

新接続元サーバの.ssh/以下のファイル構成は下記のようになっている。

[i9qqi@abc ~]$ ls -l .ssh/
合計 424
-rw------- 1  i9qqi   i9qqi   566         9月   18  17:46   authorized_keys
-rw------- 1  i9qqi   i9qqi   1743       10月 16  20:36   id_rsa
-rw-r--r-- 1   i9qqi   i9qqi   489         10月 16  20:36   id_rsa.pub
-rw-r--r-- 1   i9qqi   i9qqi   133784   10月 16  20:36   known_hosts

対応

やったこと①

.ssh/id_rsa.pubを.ssh/id_rsa.pub.xxxにリネームすることで、警告が表示されずログインできるようになった。

[i9qqi@abc ~]$ mv .ssh/id_rsa.pub .ssh/id_rsa.pub.xxx
[i9qqi@abc ~]$ ssh 192.168.xx.yy
Enter passphrase for key '/home/i9qqi/.ssh/id_rsa':
Last login: Fri Oct 16 20:57:39 2020 from 192.168.aa.bb
[i9qqi@xyz ~]$

やったこと②

コチラを参考に秘密鍵から公開鍵を再生成することで、警告が表示されずログインできるようになった。

[i9qqi@abc ~]$ ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub
[i9qqi@abc ~]$ ssh 192.168.xx.yy
Enter passphrase for key '/home/i9qqi/.ssh/id_rsa':
Last login: Sat Oct 17 02:32:19 2020 from 192.168.aa.bb
[i9qqi@xyz ~]$

原因

元の公開鍵と再生成した公開鍵を比較すると以下のようなフォーマットの違いが見られる。
コチラを参考にすると「—- BEGIN SSH2 PUBLIC KEY —-」から始まる公開鍵は「puttygen.exe」で作成し「Save public key」で保存した公開鍵に記述されるとのこと。

元の公開鍵

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20YYhhmm"
AAAAB3NzaC1yc2EAAAABJQAAAQEAhv1sqjRWR6Pfn2AwfoI2xoJHZbA6yNY9OqgJ
P81/Ap1BLFCyFkrPDvl00uU7eMU/vOYjSVEapadVfcdrJW0j95Rcsi8BzT7+j7Xm
XfSU6llhx2st/nukmPPlqns8JgRuMCKEXuXk87lSyjFPWMILVRoUoOxTv6QfazUK
fq4pTb7S2ENVd8xsm5sXa1YLqy4vGot201Ge9CgWRj0qA9bUoLj4oGyqFxb6cDSU
UrLmXqm6NhO+jZeEjtDe3x9/cjARdmj3X38wbTumoSjv8vC8yj/cnSO8pyzqEQin
7J/CeTjU2hVN54iPILtYqgKcZzoG/MI5ZQLX4wDIVR8hyytSCQ==
---- END SSH2 PUBLIC KEY ----

再生成した公開鍵

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhv1sqjRWR6Pfn2AwfoI2xoJHZbA6yNY9OqgJ P81/Ap1B
LFCyFkrPDvl00uU7eMU/vOYjSVEapadVfcdrJW0j95Rcsi8BzT7+j7Xm XfSU6llhx2st/nukmPPlqns8JgR
uMCKEXuXk87lSyjFPWMILVRoUoOxTv6QfazUK fq4pTb7S2ENVd8xsm5sXa1YLqy4vGot201Ge9CgWR
j0qA9bUoLj4oGyqFxb6cDSU UrLmXqm6NhO+jZeEjtDe3x9/cjARdmj3X38wbTumoSjv8vC8yj/cnSO8py
zqEQin 7J/CeTjU2hVN54iPILtYqgKcZzoG/MI5ZQLX4wDIVR8hyytSCQ==

まとめ

たしかに元の公開鍵は「puttygen.exe」で作成した覚えがあるが、新接続元サーバで警告が表示されるようになったのはOpenSSHのバージョンが変わったことによるものでしょうか。
より深い「原因」までは探ることはできなかったけど、とりあえずの対処方法になります。
ま、警告だけで接続はできるので気にしないってのもありだけど。

ご指摘、アドバイスなどありましたらコメントいただけるとありがたいです。

参考

コメントを残す

メールアドレスが公開されることはありません。