今回は、Red Hat Enterprise Linux (RHEL) 9でのSSH認証について、特に鍵認証の確認方法を解説していきます。
サーバー管理者として知っておくべきSSH認証の基礎知識から、実践的な確認手順まで、順を追って説明していきます。
SSH認証方式の基礎知識
SSHによるリモート接続では、主に以下の2つの認証方式が利用されています:
1. パスワード認証
– ユーザー名とパスワードを使用する従来の認証方法
– 設定が簡単だが、総当たり攻撃などのリスクがある
– 初期設定ではこちらが有効になっていることが多い
2. 公開鍵認証(鍵認証)
– 秘密鍵と公開鍵のペアを使用する認証方法
– パスワード認証より高いセキュリティを確保できる
– 自動化やスクリプト処理との相性が良い
パスワード認証と鍵認証の違い
パスワード認証と鍵認証の主な違いは以下の通りです:
セキュリティ面:
– パスワード認証:
– パスワードが漏洩するリスクがある
– ブルートフォース攻撃の対象となりやすい
– パスワードの定期変更が推奨される
– 鍵認証:
– 秘密鍵が適切に管理されている限り、非常に安全
– 暗号学的に解読が困難
– パスフレーズを設定することで二重の保護も可能
運用面:
– パスワード認証:
– 設定が簡単
– パスワードの管理や変更の手間が必要
– 手動でのログインに向いている
– 鍵認証:
– 初期設定にやや手間がかかる
– 一度設定すれば管理が容易
– 自動化された処理に適している
鍵認証の設定確認手順
RHEL 9で鍵認証の設定を確認する手順を説明します。
1. SSHデーモンの設定確認
sudo cat /etc/ssh/sshd_config | grep PubkeyAuthentication
この結果で`PubkeyAuthentication yes`となっていれば、鍵認証が有効になっています。
2. authorized_keysファイルの確認
ls -la ~/.ssh/authorized_keys
このファイルには、接続を許可する公開鍵が登録されています。
3. authorized_keysの内容確認
cat ~/.ssh/authorized_keys
各行が一つの公開鍵を表しており、以下の形式になっています:
“`
ssh-rsa AAAAB3NzaC1yc2EA… user@hostname
“`
4. 鍵の種類と長さの確認
ssh-keygen -l -f ~/.ssh/authorized_keys
このコマンドで各鍵のビット長とフィンガープリントが表示されます。
接続可能なサーバーの確認方法
特定のサーバーから接続可能な他のサーバーを確認する手順です:
1. 秘密鍵の確認
ls -la ~/.ssh/id_*
このコマンドで所持している秘密鍵ファイルを確認できます。
2. 接続テスト
ssh -v username@target_server
`-v`オプションを使用することで、詳細な認証プロセスが表示されます。
トラブルシューティングのポイント
SSH鍵認証で問題が発生した場合の主な原因と対処方法を詳しく解説します。
1. パーミッションの問題
ls -la ~/.ssh/
適切なパーミッション設定:
– `.ssh`ディレクトリ: 700
– `authorized_keys`: 600
– 秘密鍵ファイル: 600
パーミッションが不適切な場合は、以下のコマンドで修正します:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
2. 所有者の問題
– ファイルの所有者が誤っている場合、認証が失敗します
– 以下のコマンドで所有者を確認・修正します:
ls -l ~/.ssh/
sudo chown -R username:username ~/.ssh/
3. SELinuxコンテキストの問題
– SELinuxが有効な環境での確認:
ls -Z ~/.ssh/authorized_keys
restorecon -R -v ~/.ssh/
4. sshd_configの設定ミス
よくある設定ミスと確認方法:
sudo grep -E "^(PubkeyAuthentication|PasswordAuthentication|PermitRootLogin|AuthorizedKeysFile)" /etc/ssh/sshd_config
確認すべき設定:
– `PubkeyAuthentication yes`
– `AuthorizedKeysFile .ssh/authorized_keys`
– `PasswordAuthentication`の状態
設定を変更した場合は、sshdの再起動が必要:
sudo systemctl restart sshd
5. 鍵のフォーマットの問題
– 鍵が正しい形式で保存されているか確認:
ssh-keygen -l -f ~/.ssh/authorized_keys
– 一般的なエラーメッセージと原因:
– `key_read: uudecode failed`: 鍵が破損している可能性
– `bad permissions`: パーミッションが不適切
– `invalid format`: 鍵のフォーマットが不正
6. ネットワーク接続性の問題
– SSHポート(通常は22)の疎通確認:
telnet target_server 22
nc -vz target_server 22
7. デバッグ情報の取得方法
– クライアント側でのデバッグ:
ssh -vvv username@target_server
– サーバー側でのデバッグ:
1. sshdの設定を一時的に変更:
sudo vi /etc/ssh/sshd_config
# LogLevel DEBUGに変更
2. ログの確認:
sudo tail -f /var/log/secure
# またはjournalctlを使用
sudo journalctl -fu sshd
8. よくある失敗パターンと対処法
a. 「Permission denied (publickey)」エラー
– 考えられる原因:
– 秘密鍵と公開鍵のペアが一致していない
– authorized_keysファイルに公開鍵が正しく登録されていない
– パーミッションの問題
対処方法:
# 公開鍵の内容確認
cat ~/.ssh/id_rsa.pub
# authorized_keysの内容確認
cat ~/.ssh/authorized_keys
# 公開鍵の再登録
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
b. 「Host key verification failed」エラー
– 考えられる原因:
– サーバーの再インストールやIPアドレスの再利用
– known_hostsファイルの不一致
対処方法:
# 該当ホストの削除
ssh-keygen -R target_server
# または手動でknown_hostsファイルを編集
vi ~/.ssh/known_hosts
c. 「Load key “/home/user/.ssh/id_rsa”: bad permissions」エラー
– 秘密鍵のパーミッションが不適切な場合に発生
– 対処方法:
chmod 600 ~/.ssh/id_rsa
トラブルシューティングの基本的な手順
問題が発生した場合の確認項目についてまとめました。
1. クライアント側の確認
– 秘密鍵の存在と権限
– ssh -v オプションでのデバッグ出力確認
– .ssh ディレクトリの権限
2. サーバー側の確認
– authorized_keysの内容と権限
– sshdの設定
– SELinuxの状態
– ログファイルの確認
3. ネットワークの確認
– ファイアウォールの状態
– ポートの開放状態
– ネットワーク経路
これらを一通り確認できれば、大体の認証問題は解決できるのではないかと思います。
まとめ
RHELでのSSH認証、特に鍵認証の仕組みと確認方法について解説しました。
鍵認証の利点を活かすためには、秘密鍵の管理を適切に行うことが重要です。定期的に認証設定を確認し、不要な公開鍵は削除するなど、適切な管理を心がけましょう。
コメント