概要
SSH公開鍵認証の設定メモ。
前提
説明の便宜上以下の前提を設けておく。
- クライアントのホスト名 … myclient
- クライアント上のユーザ名 … myuser1
- サーバのホスト名 … myserver
- サーバ上のユーザ名 … myuser2
鍵ペアを作る場所
-
クライアント側で鍵ペアを作る
- 「秘密鍵を配る」という行為が発生しないので安全。作業者が少数ならこれで良いと思う。
-
サーバ側で鍵ペアを作る
- 作業者がたくさんいる場合、作業者毎の公開鍵を収集・設定するのが大変なので、サーバ側で鍵ペアを作り、秘密鍵を作業者に配布する。
クライアント側で鍵ペアを作る場合の設定手順
クライアント側:鍵ペア作成
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/myuser1/.ssh/id_rsa): (Enter押下)
Enter passphrase (empty for no passphrase): (Enter押下)
Enter same passphrase again: (Enter押下)
Your identification has been saved in /home/myuser1/.ssh/id_rsa. … 秘密鍵
Your public key has been saved in /home/myuser1/.ssh/id_rsa.pub. … 公開鍵
The key fingerprint is:
xx:xx:…:xx:xx myuser1@myclient
The key's randomart image is:
+--[ RSA 2048]----+
| oo |
…
| .o.. |
+-----------------+
クライアント側:公開鍵情報取得
$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3N……inJJbQ==
これを丸々コピって使う。
サーバ側:公開鍵情報設定
公開鍵をそのまま貼り付け。複数登録したければ改行区切りで複数入力。
~/.ssh/authorized_keys を編集 (無ければ新規作成)
ssh-rsa AAAABBB……XXX==
ssh-rsa AAAACCC……XXX==
ssh-rsa AAAADDD……XXX== … こんな感じに複数の鍵を登録できる。
他ユーザから読まれないように、パーミッションを 600 に設定。
$ chmod 600 ~/.ssh/authorized_keys
クライアント側:接続
$ ssh myuser2@myserver
The authenticity of host 'myserver (xxx.xxx.xxx.xxx)' can't be established.
ECDSA key fingerprint is xx:xx:…:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes … 初回はこれを聞かれるので「yes」を入力
Warning: Permanently added 'myserver,xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts.
Last login: Sun Oct 18 16:32:00 2015 from xx.xx.xx
FreeBSD 9.1-RELEASE-p24 (SAKURA17) #0: Thu Feb 5 10:03:29 JST 2015
Welcome to FreeBSD!
[myuser2@myserver ~]$
概説
今回クライアント側で作った鍵ペアの意味するところは、
作業者をAさんとしたとき、
「AさんがAさんであることを証明するための鍵」
である。
サーバをXとしたとき、
XサーバにAさんの公開鍵を登録するということは、
「Xサーバにおいて、AさんからのSSHアクセスを許可する」
ということを意味する。
サーバ側で鍵ペアを作る場合の設定手順
サーバ側:鍵ペア作成
ここで作る鍵ペアは作業者に配布することになるので、~/id_rsa とは別ものとして作ったほうが良い。今回は mykey という名前で鍵ペアを作成する。
$ ssh-keygen -f mykey
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): (Enter入力)
Enter same passphrase again: (Enter入力)
Your identification has been saved in mykey. … 秘密鍵
Your public key has been saved in mykey.pub. … 公開鍵
The key fingerprint is:
xx:xx:…:xx:xx myuser2@myserver
The key's randomart image is:
+--[ RSA 2048]----+
| o==*.+ |
…
| Eo.. |
+-----------------+
$ ls -l
-rw------- 1 mykey users 1675 Oct 18 21:37 mykey
-rw-r--r-- 1 mykey users 408 Oct 18 21:37 mykey.pub
作成された公開鍵情報を authorized_keys に登録しておく。
$ cat mykey.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
クライアント側:秘密鍵の設置
上記手順で生成した秘密鍵 (mykey) を受け取り、~/.ssh/mykey という名前で設置。(パーミッションは 600)
クライアント側:秘密鍵利用の設定
.ssh/config を編集(無ければ新規作成)
Host myserver
HostName myserver
User myuser2
IdentityFile ~/.ssh/mykey
他ユーザから読まれないように、パーミッションを 600 に設定。
$ chmod 600 .ssh/config
クライアント側:接続
$ ssh myuser2@myserver
The authenticity of host 'myserver (xxx.xxx.xxx.xxx)' can't be established.
ECDSA key fingerprint is xx:xx:…:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes … 初回はこれを聞かれるので「yes」を入力
Warning: Permanently added 'myserver,xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts.
Last login: Sun Oct 18 16:32:00 2015 from xx.xx.xx
FreeBSD 9.1-RELEASE-p24 (SAKURA17) #0: Thu Feb 5 10:03:29 JST 2015
Welcome to FreeBSD!
[myuser2@myserver ~]$
注意事項等
パーミッション
パーミッション設定は省かないこと。
「設定したほうが良い」のではなく「設定しなければならない」ことに注意。
パーミッション設定が間違っていると認証が通らない。
パスフレーズ
必要に応じて秘密鍵にはパスフレーズを設定する。
特に秘密鍵を「配布」する場合には設定しておいたほうが良い。
概説
今回サーバ側で作った鍵ペアの意味するところは、
サーバをXとしたとき、
「Xサーバにアクセスするための鍵」
である。
秘密鍵を作業者に配る行為は、
「Xサーバにアクセスするための権限を作業者に付与する」
ということを意味する。