Ubuntu の SSH サーバで PasswordAuthentication no が有効にならないときに確認すること

SSH サーバの設定で認証方式を公開鍵認証のみに限定したい場合、/etc/ssh/sshd_config に

PasswordAuthentication no

を追加し

sudo service ssh restart

を実行するというのは、各地で説明されているのですが、環境によってはこれだけでは有効になりません。論より証拠、以下のコマンドを実行してみると、現在の設定を確認することができます。

sudo /usr/sbin/sshd -T | grep passwordauthentication

これで

passwordauthentication yes

と表示されてしまった人が今回の記事の対象者です。

/etc/ssh/sshd_config の冒頭部をよく見ると

Include /etc/ssh/sshd_config.d/*.conf

と書かれています。つまり、/etc/ssh/sshd_config.d/ 以下にある .conf で終わるファイルが存在する場合、こちらの設定が優先されるのです。インストール時の設定などにより、/etc/ssh/sshd_config.d/50-cloud-init.conf が作成されており、この中に

PasswordAuthentication yes

が設定されている場合、/etc/ssh/sshd_config で同じ設定項目を書いても無視されます。

Linux の設定に慣れている人ならば、ここで「/etc/ssh/sshd_config.d/99-custom.conf とか作って設定すればいいんだよね?」と考えると思いますが(私も考えました)、sshd の設定は先に書かれたものが有効になります(sshd_config の冒頭部に Include があるのはこのため)。

したがって、50-cloud-init.conf に書かれた設定項目を上書きするには、/etc/ssh/sshd_config.d/49-custom.conf に設定を追加する必要があります。割と間違えやすいので要注意かと。

この記事を書いた人
グッドネイバー

“ Webに悩むお客さまの「よき隣人」でありたい ” をモットーに、Web システム開発(主に Laravel)、Web マーケティング支援の仕事をしています。お仕事のご依頼・ご相談はこちらからお気軽にどうぞ。