📖 6分で読める

【セキュリティ #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向けです。 業務環境では追加の対策が必要な場合があります。


シリーズ目次

  1. サンドボックスとは?
  2. SSH鍵認証入門 ← 今ここ
  3. Deploy Key を使う
  4. AIエージェントのリスク管理
  5. tmux でプロセス永続化
  6. CI/CD セキュリティチェック