sshの公開鍵認証について(個人的まとめ)

個人的まとめ公開鍵認証編

#はじめにsshとは
sshとはSecure Shellの略で暗号化や認証を用いて安全にリモートコンピュータと通信が出来るプロトコル。

##telnetとsshの違い
telnetではIDやパスワードを含めたすべての通信が平文(暗号化されない)で送信されているのに対し、sshはIDやパスワードを含めたすべての通信が暗号化されて送信されています

##暗号化の種類
- **共通鍵認証**
 - データの暗号化と復号化に同じ鍵を使う
 - もし誰かに鍵が渡ってしまうと復号して盗聴が可能
- **公開鍵認証**
 - 暗号化に公開鍵、復号化に秘密鍵を使う
 - データは受信者しか持たない秘密鍵を使って復号するので盗聴される可能性が低い

#公開鍵認証
今回、クライアント(ログイン元)からサーバ(ログイン先)に通信するとする
どちらもlinux系OSを使用し、ターミナルを使っています(私の場合はクライアントはubuntu、サーバはdebianを使用しています)

公開鍵と秘密鍵を使用

- **秘密鍵**は**クライアント(ログイン元)**
- **公開鍵**は**サーバ(ログイン先)**

##クライアント(ログイン元)の作業
事前に/home/name配下に.sshというディレクトリを作っておいてください

```text:クライアント(ログイン元)
$ ssh-keygen -t rsa
```
RSA暗号方式の鍵を作成
-tで鍵の種類を選べます

- rsa (RSA暗号方式)
- dsa (DSA暗号方式)

```text:クライアント(ログイン元)
Generating public/private rsa key pair.
Enter file in which to save the key (/home/name/.ssh/id_rsa):[enter]
```
鍵の名前を聞かれています
空だとid_rsaとid_rsa.pubが出来ます

```text:クライアント(ログイン元)
Enter passphrase (empty for no passphrase):[パスフレーズ入力]
Enter same passphrase again:[同じパスフレーズ入力]
```
パスフレーズを聞かれています
空だとパスフレーズなしで作成出来ます

```text:クライアント(ログイン元)
Your identification has been saved in /home/name/.ssh/id_rsa.
Your public key has been saved in /home/name/.ssh/id_rsa.pub.
```
これで/etc/name/.sshには

- **id_rsa.pub(公開鍵)**
- **id_rsa(秘密鍵)**

2つのファイルが出来ました

- **秘密鍵はクライアント側(ログイン元) -> id_rsa**
- **公開鍵はサーバ側(ログイン先) -> id_rsa.pub**

から考え、id_rsa.pub(公開鍵)をサーバ側に渡します

```text:クライアント(ログイン元)
$ chmod 700 /home/name/.ssh
```
.sshの権限を700にしておきます


##サーバ(ログイン先)の作業
こっちも事前に/home/name配下に.sshというディレクトリを作っておいてください

```text:サーバ(ログイン先)
$ mv id_rsa.pub /home/name/.ssh
```
id_rsa.pub(公開鍵)を/home/name/.sshに移す

- すでに.sshにauthorized_keysがある場合(追加していく)<br>
`$ cat id_rsa.pub >> authorized_keys`
- .sshにauthorized_keysがない場合(新しく作る)<br>
`$ mv id_rsa.pub authorized_keys`

もう**id_rsa.pub(公開鍵)**は消してしまっても構いません

```text:サーバ(ログイン先)
$ chmod 700 /home/name/.ssh
$ chmod 600 authorized_keys
```
.sshの権限を**700**に、
authorized_keysを**600**にします

##接続する(ログイン元での操作)
```text:クライアント(ログイン元)
$ ssh hoge@192.168.1.1 
Enter passphrase for key '/home/name/.ssh/id_rsa': [パスフレーズ]
Last login: Wed September 21 21:37:19 2016 from www.hoge.hoge
``` 
**$ ssh [ユーザ名]@[IPアドレス(ドメイン名)]** で接続することが出来ます

##config
接続するごとに上記のコマンドを打つのは面倒で
ポート番号の指定(-p [ポート番号])
`$ ssh hoge@192.168.1.1 -p 22`
秘密鍵の指定(-i [鍵の名前])
`$ ssh hoge@192.168.1.1 -i /home/name/.ssh/hoge`

など長くなるので
/home/name/.sshで

```text:クライアント(ログイン元)
$ vim config
Host hoge.lab
    HostName aaa.bbb.ccc
    User hoge
    Port 20
    IdentityFile /home/name/.ssh/hoge
```

Host 任意の接続名
HostName ホスト名
User ユーザー名
Port ポート番号
IdentityFile 鍵へのパス

これらを設定すると

```text:クライアント(ログイン元)
$ ssh hoge.lab
```
で接続できるようになります



#鍵を複数作る場合
```text:クライアント(ログイン元)
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/name/.ssh/id_rsa):hoge
```
鍵に名前(hoge)を付けてあげると

- **hoge(秘密鍵)**
- **hoge.pub(公開鍵)**<br>

が出来ます
デフォルトでid_rsaになるので、鍵の名前を設定することによって鍵の上書きを防ぎます


#よくあるエラー
```text:クライアント(ログイン元)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/home/name/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/name/.ssh/id_rsa
Permission denied (publickey,gssapi-with-mic).
```
id_rsa(秘密鍵)がopenしすぎている
他の人に秘密鍵にアクセスされないように推奨している

ということで**id_rsa(秘密鍵)**の権限を600にすると直ります。

```text:クライアント(ログイン元)
$ chmod 600 id_rsa
```