Edited at

SSH公開鍵認証メモ

More than 3 years have passed since last update.


概要

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サーバにアクセスするための権限を作業者に付与する」

ということを意味する。