SSH公開鍵・秘密鍵の作成方法をググると ssh-keygen
をオプションなしで紹介している記事がヒットするので、初心者はそれだけ見て納得し、オプションのことなど知る由もなく仕事に戻っていきますね(自己紹介)。
しかしもう少し調べてみると、できれば -t
-C
オプションは毎回付けた方がよいと思いました。
TL;DR
$ ssh-keygen -t ed25519 -C ""
SSH鍵の作成方法
ssh-keygen
を使います。
$ ssh-keygen -t ed25519 -C ""
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_ed25519): # そのままEnterを押す
Enter passphrase (empty for no passphrase): # そのままEnterを押す(パスフレーズが欲しい場合は入力してEnter)
Enter same passphrase again: # そのままEnterを押す
Your identification has been saved in /home/ec2-user/.ssh/id_ed25519.
Your public key has been saved in /home/ec2-user/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:XXX
The key's randomart image is:
+--[ED25519 256]--+
|.E. .o+.o |
|.o . .=.= . |
|o + +.+*.o o |
|++.o.=o*=+. . |
|.o...=*.S+o |
| B=.o. . |
| .*o . |
| . |
| |
+----[SHA256]-----+
$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKkpYGsqIGWd5Nl0Tp0w9RpT2ghoehsThe71AcmbPb5B
-t
オプションのすすめ
-t
オプションでは暗号アルゴリズムを指定します。オプションを使用しない場合のデフォルトはRSAです。
OpenSSH 6.5以降であれば、パフォーマンスとセキュリティに優れた1Ed25519を指定するとよいでしょう。GitHubのドキュメントでも、サンプルコードでEd25519が使われています2。
$ ssh-keygen -t ed25519
-C
オプションのすすめ
-C
オプションではコメントを指定します。コメントは、公開鍵の末尾に付与されます。オプションを使用しない場合は、ssh-keygen
を実行した環境のユーザー名とホスト名で username@hostname
の形式になります。
$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKkpYGsqIGWd5Nl0Tp0w9RpT2ghoehsThe71AcmbPb5B username@hostname
ただし、コメントは必須ではなく、形式も任意です。
生成した鍵をお客様などに渡す場合には、余計な情報となるため、-C ""
としてコメントなしで鍵を生成するとよいでしょう3 4。
$ ssh-keygen -C ""
もちろん、鍵の管理のために意図的にコメントを付けたい場合は、付けるとよいです。
コメントの表示と変更の方法
コメントは秘密鍵にも含まれています。表示するには以下のようにします。
$ ssh -l -f ~/.ssh/id_ed25519
256 SHA256:XXX comment (ED25519)
秘密鍵のコメントを変更するには、以下のようにします。なお公開鍵のコメントは直接テキストエディターで編集できます。
$ ssh -c -C "new comment" -f ~/.ssh/id_ed25519
(おまけ)SSH鍵の登録方法
ローカルの公開鍵を持って行く場合、ssh-copy-id
を使うと簡単です。
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub username@hostname
手動でやる場合は以下の流れです。
$ scp ~/.ssh/id_ed25519.pub username@hostname
$ ssh username@hostname
リモートサーバーで:
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys
$ rm ~/id_ed25519.pub
$ chmod 600 ~/.ssh/authorized_keys
(おまけ)公開鍵認証を有効化する方法
まだの場合、リモートサーバーで公開鍵認証によるSSH接続を有効化します。
リモートサーバーの /etc/ssh/sshd_config
を開いて、以下の記述がなければ追記します(先頭に #
が付いていたら外します。no
になっていたら yes
にします)。
PubkeyAuthentication yes
SSHデーモンを再起動します。
$ sudo systemctl restart sshd # OSによって違う
(おまけ)楽にSSH接続する方法
毎回 ssh -i key username@hostname
と打つのが面倒な場合は、~/.ssh/config
ファイルに以下のように追記してください(ファイルがなければ作成する)。
Host remote
User username
HostName hostname
IdentityFile key
※ Host
の remote
の部分は任意の名前。
そうしたら、ssh remote
で接続できます。
-
$ ssh-keygen -t ed25519 -C "your_email@example.com"
、Generating a new SSH key and adding it to the ssh-agent - GitHub Docs ↩ -
WindowsのPowerShellだと
option requires an argument -- C
と怒られてしまいます。コマンドプロンプトだと大丈夫。 ↩