Help us understand the problem. What is going on with this article?

SSH公開鍵認証メモ

More than 5 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サーバにアクセスするための権限を作業者に付与する」
ということを意味する。

kobake@github
C++, C# が本命。それ以外は義理。
http://blog.clock-up.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away