sshで公開鍵認証を設定したけれども、それがうまく認証されずにパスワードを求められる場合、以下の観点から設定を見直す事をおすすめする。

1.サーバ側のファイル・ディレクトリのパーミッションや所有者設定がおかしい

原因として、一番多いのがこのパーミッションや所有者設定だろう。
sshの仕様上、各ディレクトリは以下のようなパーミッションになっていなければならない。

  • 「~/.ssh」ディレクトリ … 700(drwx------)
  • 「~/.ssh/authorized_keys」ファイル … 600(-rw-------)

もちろんディレクトリやファイルの所有者はホームディレクトリのユーザである必要がある。
もし設定がうまく出来ていない場合は、対象のユーザで以下のコマンドを実行して再設定を行う。

chown -R $(whoami).$(id `whoami` -gn) ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

上記ディレクトリのパーミッション、所有者設定が正常に行われているにも関わらず動作しない場合、ホームディレクトリのパーミッション設定が適切ではない可能性がある。
その場合、対象のユーザで以下のコマンドを実行する。

chmod go-w ~/

なお、パーミッション関連が問題の場合は「Authentication refused: bad ownership or modes for file authorized_keysのpath」というログがsshdのログ(通常であれば、/var/log/secure)に出力されるので、そこから判断すると良いだろう。

この他、何らかの理由でユーザのホームディレクトリが正常にマウントされていない場合、sshdのプロセスが「\~/.ssh」ディレクトリにアクセス出来ずに接続が出来ない事がある。

2.サーバ側のsshd_config、authorized_keysの設定を見直す

そもそも、sshd_configやauthorized_keysなどの設定に問題が無かったかを見直す。
例えば、「PubkeyAuthentication」がyesになっていない場合などがそれに該当する。(なお、ただコメントアウトされている場合は有効(yes)になっている)

少なくとも、以下2つの記述が有るようであれば(かつ、設定が重複していなければ)鍵認証の設定は有効のはずである。

また、authorized_keysの記述が正しいかどうかも見直そう。
例えば、公開鍵が複数記述されている場合、一行につきひとつの公開鍵が書かれているかどうか(複数の公開鍵が一行にまとめて記述されていないかどうか)、記述ルールは正しいかどうかを確認する。
で、間違っていれば直す。

3.SELinuxが有効になっている

また、SELinuxが有効になっている場合、公開鍵認証を動作させるには別途設定が必要になる。
サーバ側でログインを行うユーザで以下のコマンドを実行し、設定を付与する。

restorecon -R -v ~/.ssh

今回は、基本的に遭遇しやすい原因とその対処方法について記述した。
その他、うまくいかない場合はこちらのページを参考の上対応を進めると良いだろう。