SSH公開鍵認証メモ

## 概要
SSH公開鍵認証の設定メモ。

## 前提
説明の便宜上以下の前提を設けておく。

- クライアントのホスト名 … myclient
- クライアント上のユーザ名 … myuser1
- サーバのホスト名 … myserver
- サーバ上のユーザ名 … myuser2

## 鍵ペアを作る場所

- [クライアント側で鍵ペアを作る](#クライアント側で鍵ペアを作る場合の設定手順)
    - 「秘密鍵を配る」という行為が発生しないので安全。作業者が少数ならこれで良いと思う。

<!-- -->

- [サーバ側で鍵ペアを作る](#サーバ側で鍵ペアを作る場合の設定手順)
    - 作業者がたくさんいる場合、作業者毎の公開鍵を収集・設定するのが大変なので、サーバ側で鍵ペアを作り、秘密鍵を作業者に配布する。


## クライアント側で鍵ペアを作る場合の設定手順

### クライアント側：鍵ペア作成
```text
$ 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 ~]$
```

### 概説
今回クライアント側で作った鍵ペアの意味するところは、
作業者をＡさんとしたとき、
「ＡさんがＡさんであることを証明するための鍵」
である。

サーバをＸとしたとき、
ＸサーバにＡさんの公開鍵を登録するということは、
「Ｘサーバにおいて、Ａさんからの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 ~]$
```

## 注意事項等
### パーミッション
パーミッション設定は省かないこと。

「設定したほうが良い」のではなく「設定しなければならない」ことに注意。
パーミッション設定が間違っていると認証が通らない。

### パスフレーズ
必要に応じて秘密鍵にはパスフレーズを設定する。
特に秘密鍵を「配布」する場合には設定しておいたほうが良い。

### 概説
今回サーバ側で作った鍵ペアの意味するところは、
サーバをＸとしたとき、
「Ｘサーバにアクセスするための鍵」
である。

秘密鍵を作業者に配る行為は、
「Ｘサーバにアクセスするための権限を作業者に付与する」
ということを意味する。