SSH 鍵管理とセキュリティの究極のガイド
Secure Shell (SSH) は、Linux サーバーを管理するための標準的なプロトコルです。パスワードも使用できますが、SSH 鍵は大幅に安全で便利な代替手段を提供します。しかし、生成からローテーションまで、これらの鍵を正しく管理することは、強固なセキュリティ体制を維持するために不可欠です。
このガイドでは、基本的な生成から高度な管理戦略まで、SSH 鍵について知っておくべきすべてのことを網羅します。
1. 安全な鍵の生成
SSH セキュリティの第一歩は、適切なアルゴリズムを選択し、強力な鍵ペアを生成することです。
オンライン SSH 鍵ジェネレーター
オンライン SSH 鍵ジェネレーター は、テストや鍵ペアの迅速な作成には便利ですが、本番用の鍵に Web ベースのツールを 決して 使用してはいけません。秘密鍵は常にローカルマシンで生成し、ネットワーク経由で送信されないようにしてください。
ssh-keygen コマンドビルダー
鍵を生成するための標準的なツールは ssh-keygen です。ssh-keygen コマンドビルダー は、最適なパラメータを選択するのに役立ちます。今日では、古い RSA よりも Ed25519 を優先すべきです。
モダンで安全な鍵のための推奨コマンド:
ssh-keygen -t ed25519 -C "[email protected]"
古いシステムとの互換性のために RSA を使用する必要がある場合は、少なくとも 4096 ビットであることを確認してください。
ssh-keygen -t rsa -b 4096
2. アクセスの管理:authorized_keys フォーマット
authorized_keys ファイル(通常は ~/.ssh/ にあります)は、特定のユーザーとしてログインすることを許可する公開鍵を決定します。
authorized_keys フォーマット
authorized_keys フォーマット の単一のエントリは、次の 3 つの部分で構成されます。
- オプション (任意): 鍵ができることを制限します(例:
from="1.2.3.4"、no-agent-forwarding)。 - 鍵のタイプ: アルゴリズム(例:
ssh-ed25519またはssh-rsa)。 - 公開鍵データ: 実際の base64 エンコードされた鍵。
- コメント (任意): 鍵を識別するためのラベル(通常はメールアドレスまたはホスト名)。
制限付きの例:
from="192.168.1.0/24" ssh-ed25519 AAAAC3Nza... [email protected]
3. サーバーの検証:known_hosts フォーマット
authorized_keys がクライアント認証用であるのに対し、known_hosts ファイルはサーバー認証用です。これは中間者 (MITM) 攻撃からあなたを守ります。
known_hosts フォーマット
known_hosts フォーマット は、サーバーのホスト名または IP アドレスをその公開ホスト鍵にマッピングします。
サーバーに初めて接続するとき、SSH はホストのフィンガープリントを検証するように求めます。承認されると、鍵が ~/.ssh/known_hosts に追加されます。サーバーの鍵が変更された場合、SSH は警告を表示し、接続をブロックします。
エントリのフォーマット:
[hostname],[IP] ssh-ed25519 AAAAC3Nza...
4. SSH セキュリティのベストプラクティス
- パスフレーズを使用する: 秘密鍵は常に強力なパスフレーズで保護してください。たとえ鍵が盗まれても、パスフレーズがなければ役に立ちません。
- パスワード認証を無効にする: SSH 鍵が機能するようになったら、
/etc/ssh/sshd_configでPasswordAuthentication noを設定してパスワードログインを無効にします。 - 鍵を定期的にローテーションする: パスワードと同様に、SSH 鍵も定期的に変更する必要があります。特に従業員が退職した場合は重要です。
- SSH エージェントを使用する:
ssh-agentを使用して復号化された鍵をメモリに保存し、接続のたびにパスフレーズを入力しなくて済むようにします。 - 踏み台サーバー (Bastion Host) を実装する: すべてのサーバーをパブリックインターネットに公開するのではなく、単一の要塞化されたエントリポイントを使用します。
5. まとめ
SSH 鍵ジェネレーター をマスターし、authorized_keys と known_hosts のフォーマット を理解することで、インフラストラクチャへの不正アクセスのリスクを大幅に軽減できます。パスワードから鍵ベースの認証に移行することは、Linux ベースの環境を保護するための最も重要なステップです。