背景
さくらのレンタルサーバーで作成した学習用のLinuxサーバー(Debian)に、ローカルのPCからSSH接続をしようとしました。
ある程度の設定ができたつもりでいましたが、接続の際に下記のエラーが出て詰まりました。
Permission denied (publickey)
やっと解消できたので、ここに纏めます。
間違い等ありましたら、ご指導の程よろしくお願いいたします。
結論
- ファイルやディレクトリのファイルパーミッションを 強い権限にしすぎていた(盲点でした。広げすぎてもダメっぽい。)
-
.ssh
関連のファイルを、接続したいユーザーではなくrootユーザーのホームディレクトリにおいていた - sshd_configに、重複してはいけない記述を重複させていた(RSAAuthentication yes)
これらの問題が同時に起こっており、解決に時間がかかった次第です。
下記に対応した経緯をご説明します。
それぞれの経緯と解説
1. ファイルの権限について
最終的には、この問題に対応して接続できるようになりました。
ssh接続をする際に、.ssh
ディレクトリや、接続を許可する公開鍵を登録しておくファイルであるauthorized_keys
のファイルパーミッションを変更する必要があるのは知っていたのですが、一番権限が強ければ接続できるだろうと思い、学習用のテストサーバーだったこともありchmod 777
で設定していました。
どうやらこれがいけなかったらしく、最終的に...
-
.ssh
は700 -
authorized_keys
は600
を設定したところ、無事に接続できました。
■ 参考にさせていただいた記事
公開鍵でSSH接続できないときに見るところ
そもそも777で設定しない、権限の範囲が広ければ包括的に解決できるという思い込みをなくすことを学んで反省しました。
2. .ssh
を接続したいユーザーのホームディレクトリではない場所に作成していた
今回のLinuxサーバーの場合、rootユーザーのホームディレクトリは~
に該当する場所で、他のユーザーの場所は/home/ユーザー名
でした。正直これがよくわかっておらず、.ssh
は1箇所だけにあると誤解しており、rootユーザーで作成していました。
ローカルからログインしたいユーザーにログインユーザーを切り替えて、.ssh
ディレクトリを作成し、「1. 」の公開鍵や設定ファイルを配置しました。
3. サーバー側の設定ファイル「sshd_config」で重複の記述エラー
重複の記述を何かに書くとエラーが起こるという経験はあったのですが、今回引き起こしたエラーの概要は以下になります。
sshd_config
の
RSAAuthentication yes
PubkeyAuthentication yes
こちらを両方Yesにして「コメントアウトを解除して」いました。
どうやらRSAAuthentication yes
を解除する必要はなかったらしく、コメントアウトをしたら解決しました。
こちらはDebian側のログを見た時にDeprecated option RSAAuthentication
という記載があったので気づきました。
※ Debian側の認証関連のログは、var/log/auth.log
で確認できます。
■ 参考にさせていただいた記事
sshd_config に RSAAuthentication no を設定する必要はもうない
“Deprecated option RSAAuthentication” とメッセージが出たら
以上、3つの問題を対応したところ接続ができました。
最後に、解決までに行ったことを1つ記載します。
解決方法(初知り&オススメです)
エラーに気付いた方法としては、ローカルから下記のコマンドを入力しました。
ssh -vvv 接続したいユーザー名@アドレス
こちらのコマンドを実行すると、進行中のデバッグメッセージが表示されます。
ssh接続が失敗してPermission denied (publickey)
となった場合に、どこでエラーになっているのかを調べるきっかけになりました。
ぜひやってみてください。どなたかの参考になれば嬉しいです。