「SSHは安全って聞くけど、なぜ安全なの?」 「パスワードが盗聴されない理由は?」 「鍵認証って、どういう仕組み?」
SSHは暗号化された安全な通信を実現しますが、 その裏側では、かなり賢い仕組みが動いています。
でも大丈夫! この記事を読めば、銀行レベルのセキュリティが どうやって実現されているか完全に理解できます。
難しい数学は使わず、 身近な例えで分かりやすく説明します!
SSHとは?基本をおさらい

SSH = Secure Shell(安全な殻)
SSHの正体:
普通の通信:誰でも覗き見できる「はがき」
SSH通信 :鍵付きの「金庫」で送る手紙
SSHが提供する3つの安全:
機能 | 説明 | 例え |
---|---|---|
暗号化 | 通信内容を読めなくする | 手紙を暗号文にする |
認証 | 相手が本物か確認 | 身分証明書の確認 |
改ざん防止 | 内容が変更されていないか確認 | 封印シールの確認 |
なぜSSHが必要なの?
Telnet(昔の方法)の問題:
あなた:password123 → [平文] → サーバー
悪い人:盗聴中... 「パスワードは password123 か!」
SSH(現在の方法)の安全性:
あなた:password123 → [暗号化:x#k9@!p$] → サーバー
悪い人:盗聴中... 「x#k9@!p$ って何???」
SSH接続の流れを完全解説
全体の流れ(5ステップ)
1. 接続開始
クライアント「接続したいです!」
↓
2. サーバー認証
サーバー「私は本物のサーバーです(証明書)」
↓
3. 暗号化方式の決定
両者「AES256で暗号化しましょう」
↓
4. ユーザー認証
クライアント「私は正当なユーザーです」
↓
5. 安全な通信開始
両者「OK!暗号化通信を始めましょう」
ステップ1:接続の開始
TCPハンドシェイク:
クライアント:「もしもし(SYN)」
↓
サーバー :「はい、どうぞ(SYN-ACK)」
↓
クライアント:「つながりました(ACK)」
バージョン交換:
# クライアントが送信
SSH-2.0-OpenSSH_8.9
# サーバーが返信
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
ステップ2:サーバー認証(ホスト認証)
サーバーが本物か確認する仕組み:
初回接続時:
「このサーバーのフィンガープリントは xxx です。信頼しますか?」
→ yes と答えると ~/.ssh/known_hosts に保存
2回目以降:
保存されたフィンガープリントと照合
→ 一致すれば本物、違えば警告!
フィンガープリントとは:
- サーバーの公開鍵のハッシュ値
- 人間の指紋のように、サーバーごとに固有
- 偽サーバーは同じフィンガープリントを作れない
ステップ3:暗号化方式の交渉
使用する暗号化アルゴリズムを決定:
クライアント:「私はこれらの暗号化方式が使えます」
- AES256-GCM
- AES128-GCM
- ChaCha20-Poly1305
サーバー:「私もこれらが使えます」
- AES256-GCM ← これに決定!(最も強力)
- AES192-CBC
鍵交換アルゴリズム(Diffie-Hellman):
魔法のような仕組み:
1. お互いに秘密の数字を持つ
2. 計算結果だけを交換
3. 同じ共通鍵が生成される!
4. 盗聴者は共通鍵を作れない
ステップ4:ユーザー認証
3つの認証方法:
方法1:パスワード認証
クライアント:[暗号化済みトンネル内で]
「パスワードは ******** です」
サーバー :「照合... OK!ログイン許可」
方法2:公開鍵認証(推奨)
準備:
1. 鍵ペア生成(秘密鍵 + 公開鍵)
2. 公開鍵をサーバーに登録
認証時:
1. サーバー:「この暗号文を解読してください」
2. クライアント:[秘密鍵で署名]
3. サーバー:[公開鍵で検証]「本人確認OK!」
方法3:証明書認証(企業向け)
認証局(CA)が発行した証明書を使用
→ より厳格な本人確認
ステップ5:セッション確立と暗号化通信
セッション鍵で高速暗号化:
すべてのデータが暗号化:
- コマンド入力:ls -la → #x9!@k$
- 実行結果 :file.txt → &y2#p@!
- すべて暗号化された状態で送受信
暗号化技術の詳しい解説

対称鍵暗号と非対称鍵暗号
対称鍵暗号(共通鍵暗号):
同じ鍵で暗号化・復号化
例:南京錠(同じ鍵で開け閉め)
メリット:高速
デメリット:鍵の受け渡しが危険
用途:実際のデータ通信
非対称鍵暗号(公開鍵暗号):
異なる鍵で暗号化・復号化
例:郵便ポスト(誰でも入れられるが、鍵を持つ人だけ取り出せる)
メリット:鍵の配布が安全
デメリット:処理が遅い
用途:認証、鍵交換
SSHが使う暗号化アルゴリズム
暗号化アルゴリズム:
名前 | 強度 | 速度 | 説明 |
---|---|---|---|
AES-256 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 最も安全 |
AES-128 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | バランス良好 |
ChaCha20 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | モバイル向け |
3DES | ⭐⭐ | ⭐ | 古い(非推奨) |
ハッシュアルゴリズム:
- SHA-256:改ざん検出
- SHA-512:より強力
- MD5:古い(使用禁止)
公開鍵認証の仕組みを深掘り
鍵ペアの生成
ssh-keygen -t ed25519
生成される2つの鍵:
秘密鍵(id_ed25519):
- 絶対に他人に見せない
- パスフレーズで保護
- 金庫の鍵のようなもの
公開鍵(id_ed25519.pub):
- サーバーに登録
- 公開してもOK
- 金庫の錠前のようなもの
なぜ公開鍵認証が安全なのか
数学的な仕組み(簡略版):
1. 巨大な素数の掛け算は簡単
73 × 97 = 7081(一瞬)
2. でも素因数分解は超困難
7081 = ? × ?(時間がかかる)
3. この性質を利用して:
- 秘密鍵:素数のペア
- 公開鍵:掛け算の結果
実際の認証フロー:
1. サーバー:乱数を生成「12345」
2. サーバー:公開鍵で暗号化「x#k@!」
3. クライアント:秘密鍵で復号「12345」
4. クライアント:返送
5. サーバー:一致を確認→認証成功!
SSHの脆弱性と対策
よくある攻撃手法
1. ブルートフォース攻撃:
攻撃者:password1 → 失敗
攻撃者:password2 → 失敗
攻撃者:password3 → 失敗
(延々と続く)
対策:
- 強いパスワード
- fail2ban導入
- 鍵認証のみに
2. 中間者攻撃(MITM):
本来:クライアント ← → サーバー
攻撃:クライアント ← → 攻撃者 ← → サーバー
対策:
- known_hostsの確認
- フィンガープリント検証
3. 古い暗号化方式の悪用:
古いSSHv1は脆弱性あり
対策:
- SSHv2のみ使用
- 最新版にアップデート
ポートフォワーディングの仕組み

ローカルフォワード
ssh -L 8080:localhost:80 user@server
仕組み:
ローカル:8080 → [SSH暗号化トンネル] → サーバー:80
使用例:
ブラウザで localhost:8080 にアクセス
→ 実際はサーバーの80番ポートに接続
リモートフォワード
ssh -R 9090:localhost:3000 user@server
仕組み:
サーバー:9090 → [SSH暗号化トンネル] → ローカル:3000
使用例:
ローカル開発環境を外部に公開
動的フォワード(SOCKSプロキシ)
ssh -D 1080 user@server
仕組み:
すべての通信をSSH経由に
→ VPNのような使い方
SSHエージェントの仕組み
ssh-agentとは
秘密鍵を安全に管理:
通常:毎回パスフレーズ入力
エージェント使用:1回入力すれば記憶
仕組み:
1. ssh-agentがメモリ上で秘密鍵を管理
2. SSHクライアントは署名を要求
3. エージェントが代理で署名
エージェントフォワーディング
ssh -A user@bastion
多段SSH接続を簡単に:
ローカル → 踏み台 → 目的サーバー
(秘密鍵はローカルのみに保存)
SSHプロトコルのレイヤー構造
3層構造
アプリケーション層
↓
┌─────────────────┐
│ 接続層 │ チャンネル多重化
├─────────────────┤
│ 認証層 │ ユーザー認証
├─────────────────┤
│ トランスポート層│ 暗号化・圧縮
└─────────────────┘
↓
TCP/IP層
各層の役割:
- トランスポート層:
- 暗号化
- データ圧縮
- サーバー認証
- 認証層:
- ユーザー認証
- 認証方法の交渉
- 接続層:
- 複数チャンネル管理
- ポートフォワード
- X11転送
パフォーマンスとセキュリティのバランス
暗号化方式の選択
速度重視:
ssh -c aes128-gcm@openssh.com user@server
セキュリティ重視:
ssh -c chacha20-poly1305@openssh.com user@server
圧縮の活用
# 低速回線では圧縮が有効
ssh -C user@server
# 高速回線では圧縮不要
ssh -o Compression=no user@server
まとめ:SSHが安全な理由
SSHの安全性を支える技術:
✅ 強力な暗号化
- 通信内容が盗聴されても解読不可能
✅ 確実な認証
- なりすましを防ぐ複数の仕組み
✅ 改ざん検知
- データが変更されたら即座に検出
✅ 前方秘匿性
- 過去の通信は解読できない
SSHは30年以上の歴史を持ち、 世界中のエンジニアに信頼されています。
この仕組みを理解することで、 より安全にSSHを活用できるようになります!
安全は技術と理解から生まれます。
コメント