【セキュリティ #2】SSH鍵認証入門 — パスワードより安全な理由
⚠️ 注意 この記事は個人の学習記録です。筆者はセキュリティの専門家ではありません。 本番環境や機密性の高いシステムでは、必ず専門家に相談してください。
本記事の内容を参考にした結果について、筆者は一切の責任を負いません。
背景
ブログをGitHubにpushする設定をしていた時のこと。
「Deploy Keyを設定しよう」と言われて、SSH鍵を生成することに。でも、そもそもSSH鍵認証ってなんで安全なの? という疑問が浮かびました。
パスワードでログインするのとどう違うのか?秘密鍵と公開鍵って何?
調べてみたら、思ったより奥が深かったのでまとめます。
この記事で学べること
- SSH鍵認証とは何か
- パスワード認証との違い
- 秘密鍵と公開鍵の役割
- なぜ鍵認証が安全なのか
パスワード認証の問題点
VPSにログインする時、パスワードを入力していませんか?
ssh user@server.com
Password: ********
パスワードの弱点
graph TD A[パスワード認証] --> B[ブルートフォース攻撃] A --> C[辞書攻撃] A --> D[盗み見・漏洩] B --> E[💀 突破される] C --> E D --> E
| 攻撃手法 | 説明 |
|---|---|
| ブルートフォース | 総当たりで試す |
| 辞書攻撃 | よくあるパスワードを試す |
| 盗み見 | 入力を見られる |
SSH鍵認証とは
パスワードの代わりに「鍵ペア」を使う認証方式
graph LR
subgraph あなたのPC
A[秘密鍵 🔑]
end
subgraph サーバー
B[公開鍵 🔓]
end
A -->|認証| B
秘密鍵と公開鍵
| 鍵 | 役割 | 誰が持つ | 漏洩したら |
|---|---|---|---|
| 秘密鍵 🔑 | 署名する | 自分だけ | ❌ 危険 |
| 公開鍵 🔓 | 検証する | サーバー | ✅ 問題なし |
例え話
秘密鍵 = 自分だけが持つハンコ
公開鍵 = 銀行に届けた印影
銀行(サーバー)は印影(公開鍵)で本人確認をする。 ハンコ(秘密鍵)がないと認証できない。
認証の流れ
sequenceDiagram participant PC as あなたのPC participant Server as サーバー PC->>Server: 接続リクエスト Server->>PC: チャレンジ(ランダムデータ) PC->>PC: 秘密鍵で署名 PC->>Server: 署名を送信 Server->>Server: 公開鍵で検証 Server->>PC: ✅ 認証成功!
なぜパスワードより安全?
1. 推測できない
パスワード: password123 ← 推測可能
秘密鍵: 2^256 パターン ← 推測不可能
2. ネットワークに流れない
パスワード: サーバーに送信される
秘密鍵: PCの外に出ない(署名だけ送る)
3. ブルートフォースが効かない
graph LR A[2^256 パターン] --> B[1秒に1兆回試す] B --> C[宇宙の年齢でも終わらない]
鍵の生成方法
# Ed25519(推奨)
ssh-keygen -t ed25519 -C "your-email@example.com"
# RSA(互換性重視)
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
生成されるファイル
~/.ssh/
├── id_ed25519 ← 秘密鍵(絶対に外に出さない)
└── id_ed25519.pub ← 公開鍵(サーバーに登録)
サーバーへの登録
# 公開鍵をサーバーにコピー
ssh-copy-id user@server.com
# または手動で
cat ~/.ssh/id_ed25519.pub
# 出力をサーバーの ~/.ssh/authorized_keys に追記
まとめ
| 項目 | パスワード | SSH鍵 |
|---|---|---|
| 推測 | されやすい | 不可能 |
| 盗み見 | 危険 | 安全 |
| ブルートフォース | 効く | 効かない |
| 管理 | 覚える | ファイル保管 |
私はVPSでの運用なので、鍵認証に切り替えました。
💡 この記事は個人VPS向けです。 業務環境では追加の対策が必要な場合があります。
シリーズ目次
- サンドボックスとは?
- SSH鍵認証入門 ← 今ここ
- Deploy Key を使う
- AIエージェントのリスク管理
- tmux でプロセス永続化
- CI/CD セキュリティチェック