permission denied (publickey). のエラーに対する解決方法

※当サイトではアフィリエイト広告を利用しています

以前、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

コメント