afnf.net

sshの公開鍵認証が有効にならない(解決済み)

Linux 2015/10/04 16:13

現象

sshの公開鍵認証が有効にならない問題に遭遇しました。

公開鍵をコピーして、双方のパーミッションを正しく変更したのに、パスワードを要求されてしまいます

[root@server ~]# ll -a .ssh/
合計 12
drwx------. 2 root root 4096 10月  4 15:00 2015 .
dr-xr-x---. 3 root root 4096 10月  4 15:00 2015 ..
-rw-------. 1 root root  402 10月  4 15:00 2015 authorized_keys
[user123@client ~]$ ll -la .ssh/
合計 20
drwx------. 2 user123 user123 4096 10月  4 14:59 2015 .
drwx------. 4 user123 user123 4096 10月  4 14:58 2015 ..
-rw-------. 1 user123 user123 1675 10月  4 14:59 2015 id_rsa
-rw-r--r--. 1 user123 user123  402 10月  4 14:59 2015 id_rsa.pub
-rw-r--r--. 1 user123 user123  400 10月  4 14:58 2015 known_hosts
[user123@client ~]$ ssh root@server
root@server's password:

切り分け

サーバ側の問題だろうと推測し、sshdのログを確認することにしました。/etc/ssh/sshd_configを編集してログレベルを変更し、sshdを再起動します。

#LogLevel INFO
LogLevel DEBUG
[root@server ~]# /etc/init.d/sshd restart
sshd を停止中:                                             [  OK  ]
sshd を起動中:

もう一度ログインを試みると、/var/log/secureに以下のようなログが出力されました。

Oct  4 15:09:27 server sshd[1366]: debug1: trying public key file /root/.ssh/authorized_keys
Oct  4 15:09:27 server sshd[1366]: debug1: Could not open authorized keys '/root/.ssh/authorized_keys': Permission denied

ここでピンと来て、SELinuxを無効化しました。

setenforce 0

公開鍵認証が有効になりました。やっぱりか。

[user123@client ~]$ ssh root@server
Last login: Sun Oct  4 15:09:20 2015 from 192.168.179.10
[root@server ~]#

原因

SELinuxコンテキスト(ラベル)が不足していることで起きる現象とのこと。

http://stackoverflow.com/a/20818775

ラベルの再設定を行い、SELinuxが有効な場合でも公開鍵でログインできるようになりました。

[root@server ~]# restorecon -FRvv ~/.ssh
restorecon reset /root/.ssh context unconfined_u:object_r:admin_home_t:s0->system_u:object_r:ssh_home_t:s0
restorecon reset /root/.ssh/authorized_keys context unconfined_u:object_r:admin_home_t:s0->system_u:object_r:ssh_home_t:s0

対処方法

そもそも、authorized_keysを直接編集するのが駄目でした。今回初めて知ったのですが、ssh-copy-idコマンドを使うべきでした。

[user123@client ~]$ ssh-copy-id -i .ssh/id_dsa.pub root@server
root@server's password: 
Now try logging into the machine, with "ssh 'root@server'", and check in:

  .ssh/authorized_keys

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

パスワード認証後に、公開鍵の転送、パーミッションの設定、SELinuxコンテキストの設定など、もろもろをやってくれました。

Linux 2015/10/04 16:13
comments (0)

blog-java2 engine (build:2017-08-10 17:37 JST)