PasswordAuthenticationで躓いたお話
はじめまして!今回これが最初の記事になります。
色々とつたないことも多いかと思いますが、生暖かい目で見守っていただければうれしいです。
間違い・もっといい方法などがあれば、ぜひ教えてくださいね!
概要
今回はUbuntuをインストールし、最初の設定をごちゃごちゃやってる時に発生したものです。
PasswordAuthenticationをnoに設定したのに、パスワード認証が出来てしまう!
これを解決すべく色々探して、解決できました!
(正しくない方法かもしれないという前提でお願いします・・・)
環境
- VMWare Workstation Player による仮想環境
- OS : Ubuntu Server 22.04.2 LTS (Minimized)
- ssh : OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022
現象
下記の通り、/etc/ssh/sshd_config
を変更しました。
がしかし、パスワード認証が出来てしまう・・・
# パスワードによる認証を禁止する
PasswordAuthentication no
# チャレンジレスポンスでの認証を禁止する
challengeResponseAuthentication no
原因
/etc/ssh/sshd_config.d/50-cloud-init.conf
に以下のような記述がありました。
PasswordAuthentication yes
解決方法
/etc/ssh/sshd_config.d/50-cloud-init.conf
を書き換えましょう!
/etc/ssh/sshd_config.d/50-cloud-init.conf
は書き込んじゃだめそうです!
/etc/ssh/sshd_config.d/
に50以上の数字を先頭につけたファイル名のconfを作成して、その中に書くのがよさそうですね!
たとえば、99-custom.conf
とか・・・
# PasswordAuthentication yes
PasswordAuthentication no
以上です!ご覧いただき、ありがとうございました。
きっと少し経ったら忘れてるんだろうなぁ・・・
蛇足1(解決後感想とか)
これ、意外と検索してもなかなか見つけられませんでしたorz
そう、人に言えないほど時間をかけすぎたのですよ!悔しい!
皆さんはどのようにして探しているのでしょうか?
情報を探す力が不足しているとしみじみ思いました。
探しても探しても大体が sshd_config を変更しましょう が多いように感じました。
普通ならそれだけで反映されるのが普通なのでしょうか・・・・私の場合が特殊?
よく見た気がする情報
PasswordAuthentication no # -> noに変更
challengeResponseAuthentication no # -> 追記 or noに変更
UsePAM no # -> noに変更
PasswordAuthentication と challengeResponseAuthentication に関しては、 noにすることに対してためらいはなかったんですが、UsePAM に関しては、調べるうちに抵抗感というかコレジャナイ感というかそんなのが出てきて、結局変更はしませんでした。
で、結局頼ったのはChatGPTでした(笑)
もうどうにでもなれ!の感覚で設定を貼り付けて「以下のように設定した場合、パスワード認証が出来てしまいます。原因は何ですか?」と聞きました。
(仕事じゃ絶対にできない手法・・・・)
そしたら以下のように帰ってきました。
おっしゃる通り、設定ファイルにおいてパスワード認証が無効化されているにもかかわらず、パスワード認証がまだ有効であるようです。
この場合、他の設定がパスワード認証を有効にしている可能性があります。PasswordAuthenticationとChallengeResponseAuthenticationの設定が正しく行われているにもかかわらず、パスワード認証が有効になっているのは奇妙です。
問題の特定には、以下の手順をお試しください:
sshd_config
ファイル内の他の設定を確認して、パスワード認証を有効にする可能性のある項目を見つけます。sshd_config.d
ディレクトリ内の他の設定ファイルも確認し、そこでパスワード認証が有効にされている場合があるか確認します。- SSHサーバーの再起動前に設定変更を保存し、再起動後に設定が正しく反映されるようにしてください。
また、UbuntuではSSHサーバーがAppArmorによって制限される場合があります。AppArmorプロファイルが設定されている場合、パスワード認証が有効になることがあります。その場合、AppArmorの設定を確認し、適切な変更を行ってください。
もし問題が解決しない場合や詳細なサポートが必要な場合は、Ubuntuのバージョンや他の環境の情報などを提供していただけると助かります。その情報に基づいて、より具体的なサポートを提供できるかもしれません。
まさに、これの2番目のやつですよね。はっとさせられました。
きっとしっかり知識を持っている方なら気づかれるのかと思いますが、
何となくさわっている私には難しかったです。
蛇足2(sshd_config.dとか50-cloud-init.confとか)
もうここで終わっておけばいいような気がしますが、やはり気になってしまいます(笑)
たぶん将来見返したときに、気になりそうなので書いておこうと思います。
sshd_config.d
とは
OpenSSHの設定ファイルであるsshd_configを機能ごとに分割して管理するためのディレクトリで、このディレクトリは、異なる設定項目を分割して管理するために使用されるそうです。
なるほど、sshd_configに追記される形になるのかなー?
設定が上書きされてるんだから、そらいくら書いても無駄になるわな!!!!
50-cloud-init.conf
とは
Ubuntuシステムにおいてネットワークの設定を管理するための設定ファイルで、cloud-initと呼ばれるツールが使用する設定ファイルの1つだそうです。
色々調べましたが要約できそうにないです。ごめんなさい。
蛇足3(2024/11/24 追記)
お久しぶりでs(ry 1年半ぶりくらいですね!
コメントにて otnさんに教えていただいた通り、たしかに以下の一行が書かれてました!
otnさん、ありがとうございます!
Include /etc/ssh/sshd_config.d/*.conf
いろいろ見直してみたけど、解決方法は以前書いた通りでよさそうと思いました!
むしろ変更する場合は、50-cloud-init.confに追記したほうが良いのかも?
(シンプルにしたいなら一行をコメント化してしまうのもありか?許されるのか?)
さて、ここからが蛇足の本編です(笑)
sshd_configにはじまり、いろいろ読んでいくとガッツリ書かれてましたねーアッハイ
(英文読むのは避けて通れない運命だったのですね。。。)
ファイルの最初に
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
ってありますね!
これはsshdサーバのシステム全体にかかわる構成ファイルだよー
(全体に影響を与えるからあんまりいじらないほうがいいのかな?)
詳細はsshd_config(5)を参照してねーって書かれてるみたいです。
で、私思ったわけですよ、「sshd_config(5)」ってなんやねん!と(泣きそう)
結局のところ、マニュアルのsshd_configを読んでね!マニュアルのセクション5にあるよ!ってことを表してるみたいです。
察しの良い方ならお気づきかもしれませんが、次に私はこう思うわけですよ。
マニュアルってなんやねん!!!と(泣きそう再び)
安心してください、ちゃんとコマンドがありましたよ!
$ man 調べたい単語
このコマンド、マニュアルというだけあっていろいろイケる・・・だと・・!
これでコマンドはカンペキに理解した!ができそう(笑)
今回の場合は、調べたい単語は「sshd_config」なので以下のようになります
$ man sshd_config
そしたらば、つらつらと出てくるわ出てくるわで、
特に説明欄にガッツリ書いてて思わず笑ってしまいました。
Note that the Debian openssh-server package sets several options as standard in /etc/ssh/sshd_config which are not the default in sshd(8):
訳すと、Debian の openssh-server パッケージでは、/etc/ssh/sshd_config に sshd(8) のデフォルトではないいくつかのオプションが標準で設定されていることに注意してください
ってことらしいのですが、一覧の一番上の目立つところですよね・・・
合わせて気を付けたほうがよさそうなところも・・・
• Include /etc/ssh/sshd_config.d/.conf
• KbdInteractiveAuthentication no
• X11Forwarding yes
• PrintMotd no
• AcceptEnv LANG LC_
• Subsystem sftp /usr/lib/openssh/sftp-server
• UsePAM yes
んでもってその下の文章で書かれてましたねー
/etc/ssh/sshd_config.d/*.conf files are included at the start of the configuration file, so options set there will override those in /etc/ssh/sshd_config.
訳すと、/etc/ssh/sshd_config.d/*.confファイルは設定ファイルの先頭に含まれるため、ここで設定されたオプションは/etc/ssh/sshd_config内のものより優先されます。
ってことらしいです。アッハー
結局、ちゃんと書かれていることを読みましょう!足元をすくわれるよ!ってことですね!!!
ほんとのおわり
しばらくはUbuntu関連かなぁを思いつつ、また行き詰ったりで書いていけるように頑張ります。
こんな内容ですが、誰かの助けになることが出来れば幸いです。
2024/11/26 追記
教えていただいたotnさんには感謝を。おかげさまでいろいろと勘所みたいなのが増えました!
もともと長いと思ってたのに、気づけばさらに長く・・・
これにて本当に終わりです。
ここまでお付き合いいただき、ありがとうございました。
Discussion
記事を見て大変参考になりました。確かにChatGPTを活用した方がいいですね。
検索で引っかからないのはその通りだと思います。
助かりました ありがとうございます
/etc/ssh/sshd_config
の設定が、/etc/ssh/sshd_config.d/50-cloud-init.conf
の設定で上書きされたということは、/etc/ssh/sshd_config
の中にInclude /etc/ssh/sshd_config.d/*.conf
のような記述があるはずで、それに気づいていればすぐに解決でしたね。今のUbuntu だとデフォルトでそうディレクトリを作るいう設定と言うことでしょう。このあたりはOS次第かと思います。ググってみると、Ubuntu の他に Amazon Linux でもそうみたいです。他にもあるかも。
2024/10時点で「ubuntu PasswordAuthentication」でググルと「
sshd_config.d/*.conf
があるよ」という情報はすぐ見つかるので、2023/5に見つからなかったということはここ2年以内くらいの変更なのですかね。いずれにせよ、sshd_config
に書いてあることなのでファイルの中を見ていれば気づきます。おっしゃる通りでした!教えていただきありがとうございます!
他の場所でも気を付ける必要がありそうですね・・・
99-custom.conf
ではなく00-custom.conf
などのように50-cloud-init.conf
より 若い 数字でないとうまく設定が効かないと思います。/etc/ssh/sshd_config.d/*.conf
に関してご自身で書いておられるように、先に出てきた設定が優先されます。