SSH公開鍵認証の仕組み完全理解ガイド – なぜ安全?どう動く?

Web

「SSH公開鍵認証って聞くけど、難しそう…」

「なんでパスワードより安全なの?」

「公開鍵と秘密鍵って、何が違うの?」

こんな疑問を持っていませんか?

実は、SSH公開鍵認証は「世界一安全な南京錠」のようなものなんです。

あなただけが持つ特別な鍵(秘密鍵)と、誰に見せても大丈夫な錠前(公開鍵)のペアで、完璧なセキュリティを実現します。

この記事を読めば、公開鍵認証がなぜ安全なのか、どんな仕組みで動いているのかが、スッキリ理解できるようになります!

スポンサーリンク

公開鍵認証を日常生活に例えると

従来のパスワード認証は「合言葉」方式

パスワード認証は、江戸時代の「山!」「川!」のような合言葉と同じです。

問題点:

  • 盗み聞きされたら終わり
  • 総当たり攻撃で破られる可能性
  • 覚えやすいパスワードは危険
  • 複雑なパスワードは忘れやすい

公開鍵認証は「オーダーメイドの鍵と錠前」

一方、公開鍵認証はこんなイメージです:

  1. あなた専用の鍵と錠前のセットを作る
  2. 錠前(公開鍵)はサーバーの玄関に設置
  3. 鍵(秘密鍵)はあなただけが持つ
  4. 鍵がないと絶対に開かない!

しかも、この錠前は「見ても複製できない魔法の錠前」なんです。

公開鍵と秘密鍵って何が違うの?

秘密鍵(Private Key)

秘密鍵は、あなたの「印鑑」のようなもの:

  • 絶対に他人に見せてはいけない
  • これがあれば本人と証明できる
  • なくしたら大変なことになる
  • コピーは最小限に

保存場所:あなたのパソコンの~/.ssh/id_rsaなど

公開鍵(Public Key)

公開鍵は、あなたの「印鑑証明書」のようなもの:

  • 誰に見られても問題ない
  • サーバーに登録しておく
  • 秘密鍵とペアでないと意味がない
  • いくらコピーしても安全

保存場所:サーバーの~/.ssh/authorized_keys

なぜ公開鍵は公開しても安全なの?

これが暗号技術の素晴らしいところ!

たとえ話: 「12345 × 67890 = ?」の計算は簡単ですが、 「? × ? = 838102050」から元の数字を見つけるのは大変ですよね?

公開鍵暗号も同じ原理。公開鍵から秘密鍵を逆算することは、現在のコンピューターでは事実上不可能なんです。

SSH公開鍵認証の動作を順番に理解しよう

ステップ1:鍵ペアの生成

ssh-keygen -t rsa -b 4096

このコマンドで何が起きるか:

  1. 巨大な素数を2つランダムに選ぶ
  2. 複雑な数学的計算を実行
  3. 秘密鍵と公開鍵のペアが完成

生成されるファイル:

  • id_rsa(秘密鍵)- 絶対秘密!
  • id_rsa.pub(公開鍵)- 配布OK!

ステップ2:公開鍵をサーバーに登録

ssh-copy-id user@server

これで公開鍵がサーバーのauthorized_keysに追加されます。

イメージ: サーバーの玄関に「あなた専用の錠前」を取り付けた状態。

ステップ3:実際の認証プロセス

接続時、以下の処理が瞬時に行われます:

1. クライアントが接続要求

クライアント:「userでログインしたいです」

2. サーバーがチャレンジを送信

サーバー:「じゃあ、このランダムな数字(チャレンジ)に署名してください」

3. クライアントが秘密鍵で署名

クライアント:「秘密鍵で署名しました。はい、これです」

4. サーバーが公開鍵で検証

サーバー:「公開鍵で検証...OK!本人確認完了!」

この間、わずか0.1秒以下

なぜ公開鍵認証は安全なの?

セキュリティが高い5つの理由

1. パスワードがネットワークを流れない

パスワード認証:パスワードそのものが送信される(危険!) 公開鍵認証:署名だけが送信される(安全!)

2. 総当たり攻撃がほぼ不可能

パスワード:8文字なら数時間で破られる可能性 公開鍵:2048ビット鍵なら宇宙の寿命より長い時間が必要

3. 盗聴されても意味がない

たとえ通信を盗聴されても、署名は使い回しできません。 毎回違うチャレンジに対する署名なので、録音した合言葉のように再利用できないんです。

4. フィッシングに強い

偽サイトにパスワードを入力してしまう心配がありません。 秘密鍵はあなたのPCから出ていかないからです。

5. パスワードを覚える必要がない

複雑なパスワードを覚える必要なし! 秘密鍵ファイルさえあれば、自動的に認証されます。

実際に公開鍵認証を設定してみよう

基本の設定(3ステップ)

ステップ1:鍵ペアを生成

# Ed25519(最新・推奨)
ssh-keygen -t ed25519 -C "your_email@example.com"

# RSA(互換性重視)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

質問への回答:

Enter file in which to save the key (/home/user/.ssh/id_ed25519): [Enter]
Enter passphrase (empty for no passphrase): [パスフレーズを入力 or Enter]
Enter same passphrase again: [同じパスフレーズを再入力]

ステップ2:公開鍵をサーバーに転送

# 自動転送(簡単!)
ssh-copy-id user@server

# 手動転送(ssh-copy-idがない場合)
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

ステップ3:接続テスト

ssh user@server

パスワードを聞かれずにログインできたら成功!

よくある疑問をスッキリ解決

Q1: 秘密鍵にパスフレーズは必要?

A: セキュリティ重視なら設定すべき!

パスフレーズは秘密鍵の「金庫の暗証番号」です。

メリット:

  • 秘密鍵が盗まれても使われない
  • 二重のセキュリティ

デメリット:

  • 毎回パスフレーズ入力が必要(ssh-agentで解決可能)

Q2: 複数のサーバーで同じ鍵を使っていい?

A: 技術的には可能だが、推奨しません

理想は「1サーバー1鍵ペア」です。

# サーバーごとに鍵を作る
ssh-keygen -f ~/.ssh/id_rsa_server1
ssh-keygen -f ~/.ssh/id_rsa_server2

# 設定ファイルで管理
~/.ssh/config:
Host server1
    IdentityFile ~/.ssh/id_rsa_server1

Host server2  
    IdentityFile ~/.ssh/id_rsa_server2

Q3: 公開鍵はGitHubに公開しても大丈夫?

A: はい、大丈夫です!

GitHubのプロフィールに公開鍵を登録するのは安全です。 むしろ、他の人があなたのリポジトリへのアクセス権限を設定する時に便利。

Q4: RSA、DSA、ECDSA、Ed25519どれを選ぶ?

A: Ed25519が最新でおすすめ!

アルゴリズムセキュリティ速度推奨度
Ed25519★★★★★★★★★★◎ 最推奨
RSA 4096★★★★☆★★★☆☆○ 互換性重視
ECDSA★★★★☆★★★★☆
DSA★★☆☆☆★★☆☆☆× 非推奨

公開鍵認証の応用テクニック

ssh-agentで快適に

パスフレーズ付き秘密鍵を便利に使う:

# ssh-agent起動
eval $(ssh-agent)

# 鍵を登録(パスフレーズは1回だけ)
ssh-add ~/.ssh/id_ed25519

# 以降はパスフレーズ不要で接続可能!
ssh user@server

鍵の有効期限を設定

# 1年間有効な鍵を生成
ssh-keygen -t ed25519 -f temp_key -C "temporary key" 

# authorized_keysに期限付きで登録
echo 'expiry-time="2025-12-31" ssh-ed25519 AAAA...' >> ~/.ssh/authorized_keys

特定コマンドのみ実行可能にする

# authorized_keysで制限
command="/usr/bin/backup.sh" ssh-rsa AAAA... backup@example.com

この鍵ではbackup.shしか実行できません!

セキュリティを最大化する設定

サーバー側の設定強化

/etc/ssh/sshd_configを編集:

# パスワード認証を完全無効化
PasswordAuthentication no

# rootログイン禁止
PermitRootLogin no

# 公開鍵認証のみ許可
PubkeyAuthentication yes
AuthenticationMethods publickey

# 認証試行回数を制限
MaxAuthTries 3

クライアント側の設定

# 秘密鍵の権限を厳格に
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_*
chmod 644 ~/.ssh/*.pub

# 設定ファイルも保護
chmod 600 ~/.ssh/config

トラブルシューティング

公開鍵認証が動かない時のチェックリスト

□ 権限設定

# サーバー側
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# クライアント側  
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

□ authorized_keysの確認

# 公開鍵が正しく登録されているか
cat ~/.ssh/authorized_keys

# 改行やスペースに注意(1行で記述)

□ SSHデーモンの設定

# 公開鍵認証が有効か確認
grep PubkeyAuthentication /etc/ssh/sshd_config

□ ログで原因調査

# サーバー側のログ
sudo tail -f /var/log/auth.log

# クライアント側で詳細表示
ssh -vvv user@server

まとめ – 公開鍵認証で安全なSSH環境を!

ここまで読んでいただき、ありがとうございます!

SSH公開鍵認証の仕組みについて、じっくり解説してきました。

重要なポイントのおさらい:

  • 公開鍵認証は「鍵と錠前」の仕組み
  • 秘密鍵は絶対秘密、公開鍵は配布OK
  • パスワードより圧倒的に安全
  • チャレンジ&レスポンス方式で認証
  • 設定は意外と簡単!

公開鍵認証のメリット:

  • パスワードを覚える必要なし
  • 総当たり攻撃に強い
  • ネットワーク盗聴に強い
  • 自動化しやすい
  • 監査ログが残しやすい

今やIT業界では、公開鍵認証は必須のスキルです。

この記事を参考に、ぜひ公開鍵認証を導入して、安全で快適なSSH環境を構築してください!

「なるほど!」と思えたら、今すぐ鍵ペアを作ってみましょう。きっと、その便利さに驚くはずです。

コメント

タイトルとURLをコピーしました