秘密鍵ファイルからssh接続用の公開鍵を再度生成する

sshで公開鍵認証を使っている際、手元に秘密鍵はあるのだけど、間違えて公開鍵を削除してしまったり、なくしてしまった場合というのがある。 そんなときは、秘密鍵さえあるのなら 以下のコマンドで公開鍵を出力できる。

ssh-keygen -y 秘密鍵のPATH
[root@BS-PUB-CENT7-01 ~]# cat testkey.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVntFu0YdUXBerSVVKwX495TKxFuUV7y6yo+Ybx2oYAyZzPVAuXgoWctqwbbM7XmhAwidQtqjCy4xLUAZSTlXvzud2XWfszt190Rb6kqEbLWkycuiOpNmo7nRkKuMac0ickyMS4eJ/D4MfzTzyfd0T4d7NeRGS5o0T3br4xk3YMvULHnqe6VDr8MZvtsH4JgeXbcUPXAGU9QaHbuODGpJO3N+BJEo8b3dEMBkpV+zOcXSve9BUDGEj5gdra6nj0CUzE08PFsECiqGIUaB2ZLUgUoU9qy/CJZUxs2nW9V+QRzsuNHOyV0UtXtNmkshvz/ARdj/vleGUJKOUm9y2JaYH root@BS-PUB-CENT7-01.blacknon.local
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# ssh-keygen -y -f testkey
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVntFu0YdUXBerSVVKwX495TKxFuUV7y6yo+Ybx2oYAyZzPVAuXgoWctqwbbM7XmhAwidQtqjCy4xLUAZSTlXvzud2XWfszt190Rb6kqEbLWkycuiOpNmo7nRkKuMac0ickyMS4eJ/D4MfzTzyfd0T4d7NeRGS5o0T3br4xk3YMvULHnqe6VDr8MZvtsH4JgeXbcUPXAGU9QaHbuODGpJO3N+BJEo8b3dEMBkpV+zOcXSve9BUDGEj5gdra6nj0CUzE08PFsECiqGIUaB2ZLUgUoU9qy/CJZUxs2nW9V+QRzsuNHOyV0UtXtNmkshvz/ARdj/vleGUJKOUm9y2JaYH
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# diff <(ssh-keygen -y -f testkey) <(cat testkey.pub | awk '{print $1,$2}')
[root@BS-PUB-CENT7-01 ~]#

出力される公開鍵ファイル自体は同じものなので、後はそれをそのまま利用すれば良い。

…で、問題はその逆。公開鍵ファイルはあるのだが、それに対応する秘密鍵ファイルがどれだかわからないパターン。 1個1個使ってssh接続できるかどうかを確認するのもいいが、それをやりたくないのであれば、以下のように秘密鍵ファイルから公開鍵ファイルを生成して、手元にある対象サーバの公開鍵ファイルとマッチするかどうか確認すればいい。

find PATH -type f -exec file {} \; | awk -F':' '$2 ~ /private key/{print $1}' | xargs -I@ bash -c 'printf "@: ";ssh-keygen -y -f "@"' | grep -e $ -e 公開鍵の一部

なお、先日上記作業が必要になって一生懸命秘密鍵を探したのだが、なんか自分のPCの中にはなかった…(´・ω・`)。 非常に困った。どうしようかなぁ…。