例えばSSHでログインするために秘密鍵だけ渡された場合、公開鍵は自分で作成することができます。
$ ssh-keygen -f -y ~/.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
このブログを応援する
お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。