CUBE SUGAR CONTAINER

技術系のこと書きます。

OpenSSH の秘密鍵から公開鍵を復元する

OpenSSH だと公開鍵がなくなっても秘密鍵から復元できることを知った。 今回はそれを試してみる。

使った環境は次の通り。

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
$ uname -r
4.15.0-65-generic
$ ssh -V
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017

もくじ

公開鍵ペアを作る

ひとまず以下のようにして公開鍵のペアを作る。

$ ssh-keygen \
    -t rsa \
    -b 2048 \
    -P '' \
    -f $HOME/.ssh/id_rsa.example \
    -C example@example.jp
Generating public/private rsa key pair.
Your identification has been saved in /home/vagrant/.ssh/id_rsa.example.
Your public key has been saved in /home/vagrant/.ssh/id_rsa.example.pub.
The key fingerprint is:
SHA256:qrL+HHbnpNI57R+hgQM+eem2BCnAln1b632Kp1/BSw4 example@example.jp
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|. o              |
|.+ ... .         |
|.. ..+oo. .      |
|  . *.=.SE.+     |
|   . =.o.o+.o    |
|    o.*++..=     |
|  .o.*+*o.+.     |
| .o++.o=*+.      |
+----[SHA256]-----+

これで、以下のように公開鍵のペアができた。

$ ls ~/.ssh | grep id_rsa
id_rsa.example
id_rsa.example.pub

公開鍵の中身は以下の通り。

$ cat ~/.ssh/id_rsa.example.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPYjc9UeA6iZM6LhPy5BfXxby0TWyDMbItVk4reJfNEWgpng0tqZaKm2Kp4XizZupfDVMFf2MmCfS3lARO4lDXkmi6YoOoFCSmq4vjuIiykQchjrbRBoTAvNk8IX8Z9lWt7juhbeWL9LGM7tyo7aM+jrB1MteBr8rXB/ugnwmEe3rgLgq64N7zklhLwZKlN8gofH4UGO1MMTq9lPjzFr+Edq/1vIPOiQPtXjjsPCVHryaK+Kyy39qW2I7AeYMCCX5w/JxFAFC/kBLOgWIDOFoHaCxrsl5bXv1augUsHyy6yftc+H7f+Z/xJzWj0l/LRU6iqGMTcOgXtZG8w9vFrObD example@example.jp

ひとまず、作った公開鍵は移動しておく。

$ mv ~/.ssh/id_rsa.example.pub{,.orig}

秘密鍵から公開鍵を復元する

次のように ssh-keygen(1) は -y オプションを使うことで秘密鍵から公開鍵を復元できる。 秘密鍵のファイルは -f オプションで渡す。

$ ssh-keygen -y -f ~/.ssh/id_rsa.example > ~/.ssh/id_rsa.example.pub

内容を確認すると、コメントを除いて中身が復元できていることがわかる。

$ cat ~/.ssh/id_rsa.example.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPYjc9UeA6iZM6LhPy5BfXxby0TWyDMbItVk4reJfNEWgpng0tqZaKm2Kp4XizZupfDVMFf2MmCfS3lARO4lDXkmi6YoOoFCSmq4vjuIiykQchjrbRBoTAvNk8IX8Z9lWt7juhbeWL9LGM7tyo7aM+jrB1MteBr8rXB/ugnwmEe3rgLgq64N7zklhLwZKlN8gofH4UGO1MMTq9lPjzFr+Edq/1vIPOiQPtXjjsPCVHryaK+Kyy39qW2I7AeYMCCX5w/JxFAFC/kBLOgWIDOFoHaCxrsl5bXv1augUsHyy6yftc+H7f+Z/xJzWj0l/LRU6iqGMTcOgXtZG8w9vFrObD

ただ、残念ながらコメントまでは復元できない。 例えば、以下のように -C オプションをつけてもファイルには反映されなかった。

$ ssh-keygen -y -C example@example.jp -f ~/.ssh/id_rsa.example > ~/.ssh/id_rsa.example.pub

いじょう。