sshを使ってパスワードなしでログインするためには、以下の作業を実施する。
①ssh-keygenコマンドで鍵ペア(秘密鍵と公開鍵)の作成
②公開鍵を相手サーバのauthorized_keysへ登録
イメージ的には、秘密鍵を自分だけで管理し、公開鍵を接続したいサーバへ配布する感じ。
まずは①の鍵ペア作成を実施。ssh-keygenコマンドで作成する。 tオプションで鍵の暗号化形式を指定。rsa、dsa、ecdsa、ed25519などが指定可能(デフォルトはrsa)。 bオプションは鍵のビット数を指定する。省略すると2048ビットとなる(4096の方が強度は高い)。
暗号化方式RSA、鍵の長さ4096ビットの場合ssh-keygen -t rsa -b 4096
実際の作成例
$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hogehoge/.ssh/id_rsa): <- 鍵の出力場所を入力
Enter passphrase (empty for no passphrase): <- パスフレーズを入力
Enter same passphrase again: <- 再度パスフレーズを入力
Your identification has been saved in /home/hogehoge/.ssh/id_rsa. <- 作成される秘密鍵
Your public key has been saved in /home/hogehoge/.ssh/id_rsa.pub. <- 作成される公開鍵
The key fingerprint is:
SHA256:VVZ3kq/Dpb3+763dkOgnC8Pz4vzFkooE6urTQSAkGd0 hogehoge@amateras <- フィンガープリント(公開鍵のハッシュ値)
The key's randomart image is:
+---[RSA 4096]----+
|o=.. .S+o. |
|..o + .+. |
| . . .. |
| . . . |
| . So o |
| . + . E .. . |
| = . = . +++o |
| ..=. . . ..+ ooo|
| .ooB+oo.. ..+S**|
+----[SHA256]-----+
鍵の出力場所は、{homeディレクトリ}/.ssh配下が一般的なので、特別な理由がない限り変更不要。その場合、何も入力せずEnterを押す。
パスフレーズは接続の際に求められるパスワードのようなもの。不要な場合は、何も入力せずEnter。 パスフレーズを入力した場合、接続する毎にパスフレーズの入力が必要になってくるが、ssh-agentに登録すれば、ssh-agentが起動している限り、初回の1回のみでよくなる。
.ssh配下へ移動し、公開鍵と秘密鍵が生成されているか確認
$ ls -al ~/.ssh
total 24
drwxr-xr-x 1 hogehoge hogehoge 0 2月 18 21:20 ./
drwxr-xr-x 1 hogehoge hogehoge 0 2月 15 22:28 ../
-rw-r--r-- 1 hogehoge hogehoge 3434 2月 18 21:20 id_rsa <- 秘密鍵
-rw-r--r-- 1 hogehoge hogehoge 745 2月 18 21:20 id_rsa.pub <- 公開鍵
次に公開鍵を相手サーバ(接続先サーバ)のauthorized_keysへ登録する。 authorized_keysは、{homeディレクトリ}/.ssh配下に存在するので、公開鍵の内容をこのファイルに追記する。追記はviでも可能だが、catで追記するのが一般的かつ安全。 但し、catの場合、公開鍵(id_rsa.pub)を相手サーバへ転送しておく必要がある。※authorized_keysをアップデートする前に必ずバックアップをとっておくこと。
相手サーバにコピーした公開鍵をauthorized_keysへ登録$ cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
authorized_keysが存在しない場合は、転送した公開鍵(id_rsa.pub)をそのままリネームしてあげればよい。
$ mv /tmp/id_rsa.pub ~/.ssh/authorized_keys
最後にsshで接続確認をして完了。