公開鍵認証でsshが繋がらないときのチェックポイント
環境 CentOS6.6
公開鍵認証でsshが繋がらない、という時のチェックポイントメモ。
大きく以下の3つ。
1) ネットワーク接続
2) ~/.ssh/authorized_keysのパーミッション設定
3) SELinux
それぞれ詳細を書いていく。
1) ネットワーク接続
minimal構成でインストールすると、そもそもネットワークが設定されていない。
ネットワークの接続はifconfigで確認する。
$ ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
上記のようにlocalhostのみだと、外へネットワークが繋がっていない。
対応するにはeth0の設定をする。
# eth0の設定ファイルを確認 $ cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=00:0C:29:AF:7E:1B TYPE=Ethernet UUID=0d4c2353-0727-4d9e-aa3a-0f85a755a076 ONBOOT=yes # ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=dhcp # 固定ipにする場合はstaticにして、IPADDR等を設定する。 # ネットワークを立ち上げる $ ifup eth0
再度確認、eth0があればOK。
$ ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:AF:7E:1B inet addr:192.168.11.129 Bcast:192.168.11.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:feaf:7e1b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:121 errors:0 dropped:0 overruns:0 frame:0 TX packets:111 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:21478 (20.9 KiB) TX bytes:23969 (23.4 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
nslookup等が使えればOK。
$ nslookup www.google.co.jp
Server: 192.168.11.2
Address: 192.168.11.2#53
Non-authoritative answer:
Name: www.google.co.jp
Address: 216.58.220.227
ここでネットワークに繋がらない場合はファイアーウォールなどを確認する必要がある。
仮想環境のときはホスト側の設定も確認。
今回はその方法は省略。
2) ~/.ssh/authorized_keysのパーミッション設定
sshの公開鍵ログインするにはauthorized_keysが
~/.ssh | 600 or 644 |
~/.ssh/authorized_keys | 700 or 744 |
の必要がある。
基本的に他のユーザーに書き込み権限が無ければ良い模様。
変更方法は以下のようになる。
$ chmod 700 ~/.ssh/authorized_keys $ chmod 600 ~/.ssh
3) SELinux
SELinuxが有効だと、パーミッション関係なく以下のエラーが出ることがある。
SELinuxの設定を調整する方法もあるが、原因調査の際は無効にしてしまうのが楽。
$ tail /var/log/secure debug1: Could not open authorized keys '~/.ssh/authorized_keys': Permission denied
Permission deniedと出るのでついauthorized_keysを確認してしまうが、SELinuxの影響で出力されることがある。
SELinuxの確認方法は
$ getenforce # SELinux確認 Enforcing # 有効 Permissive # 警告を出力するが、アクセス制限無効 Disabled # 無効
一次的に無効にするには
$ setenforce 0 # 0:無効 1:有効
恒久的に設定する場合は
$ vim /etc/selinux/config
SELINUX=disabled
を設定する。
有効化するときは
$ vim /etc/selinux/config
SELINUX=enforcing
となる。