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

公開鍵はどこで作成すべき?(続)

More than 5 years have passed since last update.

先日の記事(公開鍵はどこで作成すべき?)の続編。

…というか、結論をひっくり返し、

 SSH の接続元

で作成したほうが良い、ということになった。

以下、
・SSH の接続元を test_client
・SSH の接続先を test_server
として、手順の形式で書いていく。

1. 鍵ペアの生成

まずは test_client にて、鍵ペアを作成する。

[satonasu@test_client ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/satonasu/.ssh/id_rsa): ← 作成先のパスとファイル名を指定
Created directory '/home/satonasu/.ssh'. ← .ssh ディレクトリが作成される
Enter passphrase (empty for no passphrase): ← パスフレーズを入力
Enter same passphrase again: ← パスフレーズをもう一度入力(確認)
Your identification has been saved in /home/satonasu/.ssh/id_rsa.
Your public key has been saved in /home/satonasu/.ssh/id_rsa.pub.

この手順だと、.ssh ディレクトリを自分で作成する必要はない。
下記の通り、アクセス権もちゃんと 700 で作成される。

[satonasu@test_client ~]$ ls -dl /home/satonasu/.ssh
drwx------. 2 satonasu satonasu 4096  2月 19 08:25 2015 /home/satonasu/.ssh

公開鍵のアクセス権は 644 だが、ここでは問題ない(後述)。

[satonasu@test_client ~]$ ls -l /home/satonasu/.ssh
-rw-------. 1 satonasu satonasu 1675  2月 19 08:25 2015 id_rsa
-rw-r--r--. 1 satonasu satonasu  403  2月 19 08:25 2015 id_rsa.pub

2. 公開鍵の転送

ここで普通に(scpで)転送してしまうと、SELinux 的にアウトな状態となる。

具体的には、下記のように、user_home_t となってしまい、
SELinux が有効な環境では id_rsa.pub が読まれなくなってしまう。

[satonasu@test_server ~]$ ll -Z /home/satonasu/.ssh/
-rw-r--r--. satonasu satonasu unconfined_u:object_r:user_home_t:s0 id_rsa.pub

そこで、ssh-copy-id コマンドを使う。

[satonasu@test_client ~]$ ssh-copy-id -i /home/satonasu/.ssh/id_rsa.pub satonasu@test_server
Now try logging into the machine, with "ssh 'satonasu@test_server'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

転送先(test_server)を見てみると…

[satonasu@test_server ]$ ll -Z /home/satonasu/.ssh/
-rw-------. satonasu satonasu unconfined_u:object_r:ssh_home_t:s0 authorized_keys

完璧。
ssh_home_t になっているし、アクセス権も 600 に変更されている。
先ほど転送元でアクセス権が 644 でも問題ないのは、ここで変更されるからだ。

そして名前もちゃんと authorized_keys になっている。

ちなみに、転送先に .ssh ディレクトリがない状態で実行したが問題なく、
ちゃんとアクセス権 700 で作成されていた。

さらに、既に公開鍵が登録されている状態で実行すると、ちゃんと追記される。
※同じ公開鍵でも追加となってしまう点は注意

こんな便利なコマンドを知らなかったとは…。

// 先日の記事にコメントを下さった iwaim@github さん、toru_miyahara さんに、この場を借りてお礼申し上げます。

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