treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

鍵とパスワードの認証を混合するsshd_configの設定

今日はSSHログインの設定を使い分ける方法についてご報告します。自分の忘れない用の備忘録に近いです。

インターネット上のサーバは公開鍵認証

インターネット上に配置されるLinuxサーバは公開鍵認証が使われることが多くなってきています。特に24時間インターネット上でグローバルIP持って稼働し続けるサーバだとパスワードでなく鍵認証でSSH接続を許可するように設定されていることが多いです。
「/etc/ssh/sshd_config」ファイルを
----------------------------------------------
#PasswordAuthentication yes
PasswordAuthentication no
----------------------------------------------
こんな感じで書き換えてパスワード認証しないようにし、鍵認証を強制するようにしています。
しかし、sshd_configに公開鍵認証を強制すると、パスワード認証はできなくなります。
そうなるとどうなるかというと…

外注向けに…

「Web制作会社に作業を外注するからWebサーバにシェル環境提供してあげて」
と、このように外部の作業者にシェルを提供しなきゃいけなくなった時、鍵認証だと先方から「アクセスできません」「どうやるか分かりません」みたいなことを言われまして…。
鍵認証って鍵ファイルをターミナルソフトに指定しないといけないのであまり親しみない人にとっては一般的じゃないみたいなんですよね。
で、結局IDとパスワードの認証ができるようにしてくれ、みたいなことを言われることもあるわけです。

例外を追加しよう

このとき、「外部に提供するシェル環境を用意しなきゃいけない」という要件を満たすために使うのが「ユーザを作成して、そのユーザだけパスワード認証にする」という設定です。
要するに原則パスワード認証拒否の設定にするのですが、特定のユーザだけパスワード認証を許可するようにします。
その設定とは
「/etc/ssh/sshd_config」ファイルの末尾に
----------------------------------------------
Match User shelluser
PasswordAuthentication yes
----------------------------------------------
と追記する、これだけです。
後は、
# adduser shelluser
でユーザを追加して、sudoが必要なら「gpasswd -a shelluser sudo」としてsudoグループに追加してしまえばroot権限も使えるシェルユーザをパスワード認証で提供できるようになります。

「/etc/ssh/sshd_config」ファイルで文末に「Match User」で指定したユーザ名(ここではshelluserというユーザ)に例外的な設定値を与えるために記述します。
つまり「Match User %ユーザ名%」に続いて「PasswordAuthentication yes」とパスワード認証を許可する記述を入れてsshd_configの記述では「PasswordAuthentication no」とある拒否設定を「Match User %ユーザ名%」で指定したユーザだけ例外的に「PasswordAuthentication yes」とできます。