認証設定の強化

centos_disable_password_ssh.sh

パスワード認証から公開鍵のみのログインへ移行する CentOS および類似の OpenSSH ホスト向けです。対象ユーザーの authorized_keys が空でないことを確認してから sshd_config を変更し、sshd -t に成功した場合に sshd を再読み込みします。ファイルが空でないことだけを確認し、鍵とクライアント側の秘密鍵が対応するかまでは検証しません。

ワンライナー

curl -fL 'https://www.helper.sh/centos_disable_password_ssh.sh' -o './centos_disable_password_ssh.sh'

このコマンドは同梱ファイルをダウンロードするだけで、実行しません。保存したソースを確認し、バージョンを照合してから実行するか判断してください。

保存したファイルを照合

このページのビルドに同梱されたバイト列と照合します。ファイルはこのタブ内で処理し、この機能は送信・保存しません。上限は2 MiBです。

期待する SHA-256
8605b22d876f2d661cfb54990bdf634a9505cb55f00653d471358085db4e627e

同梱ファイルのバイト数: 2874

チェックサムファイルを保存

スクリプトとチェックサムを同じディレクトリに保存してください。GNU Coreutils のある Linux では次のコマンドでバイト列だけを検査できます。スクリプトは実行しません。コマンドには元のファイル名が必要です。

sha256sum --check './centos_disable_password_ssh.sh.sha256'

まだ照合していません。

スクリプトとチェックサムは同じサイトから取得し、独立した署名ではありません。一致しても安全性、上流の真正性、ホストへの適合性は証明しません。可変の依存先は別途確認してください。

検証と制限を読む

実行条件

  • CentOS または sshd サービスを使う類似の OpenSSH ホスト
  • root 権限または sudo が必要
  • 対象ユーザーのホームに空ではない ~/.ssh/authorized_keys が必要
  • /etc/ssh/sshd_config が存在すること

適用場面

  • 鍵ログインを別の接続で確認してから SSH パスワード認証を停止する
  • CentOS の保守作業で鍵のみの認証設定を適用する
  • 公開 SSH ホストでパスワード総当たりの対象を減らす

主なポイント

  • 対象ユーザーの authorized_keys が空なら変更前に終了
  • sshd_config の指定項目を追加または置換
  • sshd -t に失敗した場合は元の設定を自動復元

推奨手順

  1. 対象ユーザーの鍵ログインを別の接続で先に確認します。
  2. スクリプトをダウンロードして内容を確認し、適用する場合は sudo または root で実行します。
  3. スクリプトが sshd_config を編集し、構文を確認してから sshd を再読み込みします。
  4. 最初の接続を維持したまま、別の端末で鍵による新規ログインを確認します。

注意事項

  • 鍵による新規 SSH 接続を別の端末で確認する前に実行しないでください。
  • 対象ユーザーは TARGET_USER 環境変数で指定できます。既定値は SUDO_USER、なければ root です。
  • authorized_keys の非空のみを確認し、鍵ペアの一致は検証しません。
  • UsePAM yes を維持します。構文検証に失敗した場合は自動復元しますが、検証後に reload と restart の両方が失敗しても設定は自動復元されません。

対応範囲と制限

  • CentOS または `sshd` サービスを使う類似の OpenSSH 環境向けです。root、getent、cut、sshd -t、および systemctl または service が必要です。入力は TARGET_USER のみで、既定値は SUDO_USER、なければ root です。dry-run はありません。
  • 事前確認では対象ユーザーの ~/.ssh/authorized_keys が空でないことだけを確認します。鍵の形式や、実行者が対応する秘密鍵を持つかは検証しません。別の接続で鍵ログインに成功するまで実行しないでください。
  • /etc/ssh/sshd_config のみを編集し、Include 先は調査しません。構文検証に失敗した場合はバックアップから自動復元しますが、検証後に reload と restart の両方が失敗した場合、新しい設定は残ります。

変更されるファイル、サービス、データ

  • /etc/ssh/sshd_config の PubkeyAuthentication を yes、AuthorizedKeysFile を .ssh/authorized_keys にし、PasswordAuthentication、KbdInteractiveAuthentication、ChallengeResponseAuthentication を no に設定して、UsePAM yes を維持します。
  • 編集前に /etc/ssh/sshd_config.bak.* という日時付きバックアップを作成します。sshd を reload し、失敗時は restart を試します。authorized_keys、ユーザーパスワード、ファイアウォールのポート、アプリケーションデータは変更しません。

読み取り専用の確認

  • 変更前に `getent passwd USER` で対象アカウントとホームを確認し、対応する `.ssh/authorized_keys` が空でないことを確認します。別端末からの鍵ログインも事前に試してください。
  • 読み取り専用で有効設定を確認するには `sudo sshd -T | grep -E '^(pubkeyauthentication|authorizedkeysfile|passwordauthentication|kbdinteractiveauthentication|challengeresponseauthentication|usepam) '` を使います。
  • 許可された保守作業の後、`sudo sshd -t`、`sudo systemctl status sshd`(または `sudo service sshd status`)を確認し、新しい鍵ログインを試します。成功するまで既存接続を維持してください。

失敗した場合

事前確認に失敗した場合、設定は変更されません。sshd -t に失敗すると保存済みバックアップから復元します。reload と restart の両方が失敗した場合は既存接続を維持し、`sudo journalctl -u sshd -n 100 --no-pager` を確認してください。必要に応じて日時付きバックアップを手動復元し、`sudo sshd -t` で検証してからサービスを復旧します。

参考資料

CentOS 7 のマニュアル保存版はミラーです。OpenBSD の現行マニュアルは上流の参考資料であり、CentOS 7 の実装バージョンと同一とは限りません。

実行前にダウンロードして内容を確認し、バージョンを検証してください。ハッシュはこのバイト列を識別するだけで、安全性を証明しません。pipe 実行は取得した内容を直ちに実行し、上流の依存関係は変化することがあります。

関連トピック

CentOS 7: 復旧作業の選び方

サポート終了済みホストを変更する前に、リポジトリ、SSH、Docker の容量不足を切り分けます。

トピックを見る

問題ページ

CentOS で SSH のパスワード認証を無効にした後、接続できなくなるのはなぜ?

よくある原因は、対象アカウントの authorized_keys と新しい鍵ログインを確認する前に PasswordAuthentication を無効にすることです。

ページを見る