takafumi blog

日々の勉強メモ

公開鍵認証で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

となる。