今回はSSH接続を2段階認証(2ファクタ認証)にする方法をご紹介します。
SSHを2段階認証にするメリットは、万が一登録しているIDとパスワードが漏洩しても、第二の認証手段(認証コード、生体情報など)がなければ第三者がログインできないため、不正アクセスやアカウント乗っ取りを防げる点です。
また、リスト型攻撃やフィッシングなどでパスワードが盗まれても、手元にある端末やコードがなければログインを阻止できます。
手順
SSHの2段階認証(2FA)には、Google AuthenticatorのPAMモジュールを利用するのが最も一般的です。
設定ミスによりサーバーから締め出されるのを防ぐため、現在のSSH接続は開いたまま維持し、必ず別のターミナルウィンドウから新規接続のテストを行ってください。
パッケージのインストール
サーバーのOSに合わせてコマンドを実行します。
Ubuntu / Debian系:
sudo apt update
sudo apt install libpam-google-authenticator
CentOS / RHEL / AlmaLinux系:
sudo dnf install epel-release
sudo dnf install google-authenticator
2段階認証キーの生成
2FAを有効にしたいユーザーアカウントで以下コマンドを実行。
google-authenticator
実行後、巨大なQRコードといくつかの質問が表示されます。
①タイムベースのトークンを使用するか: y
②スマートフォンの認証アプリ(Google Authenticatorなど)でQRコードを読み取る。
③~/.google_authenticator に設定を保存するか: y
④同一トークンの複数回使用を禁止するか(セキュリティ向上): y
⑤タイムスケジュールのウィンドウを拡大するか(時刻ズレ対策): 通常は n
⑥レートリミット(3回連続失敗でブロック)を有効にするか: y
PAMの設定変更
PAM設定ファイルを開きます。
sudo vi /etc/pam.d/sshd
ファイルの末尾(または @include common-auth の下)に以下の1行を追記して保存します。
auth required pam_google_authenticator.so
SSHデーモンの設定変更
SSHのメイン設定ファイルを開きます。
sudo vi /etc/ssh/sshd_config
以下の項目を探し、yes に変更します(古いOSの場合は ChallengeResponseAuthentication yes となっている場合があります)。
KbdInteractiveAuthentication yes
さらに、「公開鍵認証」と「2段階認証」の両方を必須にする場合は、ファイルの末尾に以下を追記します。
AuthenticationMethods publickey,keyboard-interactive
SSHサービスの再起動とテスト
設定を反映するためにSSHサービスを再起動します。(このタイミングで切断はしないでください。)
Ubuntu / Debian系:
sudo systemctl restart ssh
CentOS / RHEL / AlmaLinux系:
sudo systemctl restart sshd
別のターミナルを開き、サーバーへSSH接続を行います。パスワード(または公開鍵)による認証後、Verification code: と表示され、アプリの6桁の数字を入力してログインできれば成功です。
まとめ
いかがだったでしょうか。思ったより簡単に設定できるのにセキュリティはより高いものになるので必ず設定してほしい項目です。冒頭ご説明したとおり、2段階認証を設定しておくことでIDとPWが流出したとしてもギリギリのところで侵入を食い止めてくれます。
ただし、今回Googleのサービスを使用してますので、Googleアカウントが乗っ取られた場合、2段階認証の意味がなくなってしまうのでGoogleアカウントのセキュリティチェックは頻繁に実施するようにしてください。



コメント