以前、sshでパスワードなし認証をするために、自分の公開鍵を相手サーバに登録し自動で認証させるようにしました。
その際に、Permission denied (publickey) のエラーが発生したので、対応方法をメモしておきます。
permission denied (publickey). の原因
そもそも、「permission denied (publickey)」というエラーメッセージは、SSH接続時に発生します。
このエラーは、SSHクライアントがSSHサーバーに接続しようとしたとき、サーバーが公開鍵認証を要求しているにもかかわらず、クライアントが認証に使用する公開鍵をサーバーに送信できなかった場合に表示されます。
このエラーの原因としては、ディレクトリのパーミッション(権限)にあります。
ssh hoge@接続先IP
と接続する場合、hogeユーザのデフォルトディレクトリに対して、自分以外のユーザに書き込み権限がある場合に、このエラーが発生します。
つまり、ディレクトリの権限を、700や744にする必要があるということです。
下記のコマンドを実行して、ホームディレクトリの権限を変更しましょう。
chmod 700 /home/hoge/
# または
chmod 744 /home/hoge/
Linuxで権限を変更してもエラーが発生する場合の対処方法
ディレクトリ権限が正しいのに、まだ上記のエラーが発生する場合は、rootユーザで接続しようとしているケースが考えられます。
rootユーザで接続しようとしている場合、以下を確認してください。
vi /etc/ssh/sshd_config
# この設定が存在しているかを確認する
PermitRootLogin forced-commands-only
この設定が有効になっている場合、rootユーザでのログインはコマンドの実行しか認めていません。
そのため、通常のログインはすることができないということになります。
もしrootユーザを扱いたい場合は、この設定をコメントアウトしておく必要があります。
vi /etc/ssh/sshd_config
# コメントアウトする
# PermitRootLogin forced-commands-only
コメント