例えばSSHでログインするために秘密鍵だけ渡された場合、公開鍵は自分で作成することができます。
$ ssh-keygen -y -f ~/.ssh/id_foo > ~/.ssh/id_foo.pub
準備
秘密鍵を保存
まずはもらってきた秘密鍵を所定の場所に保存します。通常macOSやLinuxでは基本的にホームディレクトリ直下の.ssh
ディレクトリへ設置します。
$ vi ~/.ssh/id_foo -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn (中略) IDBAUGBw== -----END OPENSSH PRIVATE KEY-----
秘密鍵のパーミションを設定
秘密鍵のパーミションを600に合わせます。これを忘れるとこのあとつまずきますので必ず行います。
$ chmod 0600 ~/.ssh/id_foo
公開鍵を生成
ssh-keygen
コマンドで生成します。一般的に公開鍵の拡張子は.pub
とすることが多いですね。
$ ssh-keygen -y -f ~/.ssh/id_foo > ~/.ssh/id_foo.pub
オプションの内容は以下の通り。
- -y
- OpenSSH形式の秘密鍵を読み込み、OpenSSH形式の公開鍵を標準出力に出力します。
- -f
- 秘密鍵のファイルを指定します。指定しない場合は
~/.ssh/id_rsa
が利用されます。
エラー
パーミッションがゆるすぎる
パーミッションが600よりもゆるい場合、エラーとなり出力されません。
$ ssh-keygen -f -y ~/.ssh/id_foo > ~/.ssh/id_foo.pub @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for '/Users/katsube/.ssh/id_foo' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/Users/katsube/.ssh/id_foo": bad permissions
パーミッションを600にすると今度はエラーとならず正常に出力されました。
$ chmod 0600 ~/.ssh/id_foo $ ssh-keygen -y -f ~/.ssh/id_foo > ~/.ssh/id_foo.pub
参考
man ssh-keygen