先日の記事(公開鍵はどこで作成すべき?)の続編。
…というか、結論をひっくり返し、
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 さんに、この場を借りてお礼申し上げます。