SSH(Secure Shell)のまとめ
1. SSHとは
SSH(Secure Shell、セキュアシェル)は、ネットワーク上にある別のコンピュータへ安全に接続し、リモート操作やファイル転送を行うための暗号化通信プロトコルである。
- プロトコル名:SSH(Secure Shell)
- デフォルトポート:TCP 22番
- OSIモデル:アプリケーション層(Layer 7)で動作
- クライアント・サーバー型のモデルを採用
2. 歴史
| 項目 |
内容 |
| 開発者 |
タトュ・ウルネン(Tatu Ylönen、フィンランド出身のプログラマ) |
| 開発年 |
1995年 |
| 背景 |
Telnet・rlogin・FTPなどの平文通信プロトコルのセキュリティ脆弱性に対処するため |
| プロプライエタリ版 |
SSH Communications Security(2006年に設立、商用版を提供) |
| オープンソース版 |
OpenSSH(現在最も普及している実装) |
| 標準化 |
2006年にRFCとしてIETF規格化(RFC 4250〜RFC 4256) |
主要なRFC文書
- RFC 4251 — SSHプロトコルアーキテクチャ
- RFC 4252 — ユーザー認証プロトコル
- RFC 4253 — トランスポート層プロトコル
- RFC 4254 — 接続プロトコル
- RFC 4255 — SSH公開鍵の使用方法
- RFC 4256 — ユーザー認証の一般メカニズム
3. SSHアーキテクチャ(3層モデル)
SSHは単一のモノリシックなプロトコルではなく、3つのサブプロトコルのレイヤーで構成されている。
① トランスポート層(Transport Layer)
- RFC 4253 で定義
- 役割:サーバー認証、機密性(暗号化)、データ整合性、圧縮
- ディフィー・ヘルマン鍵交換によってセッション鍵を生成
- 完全前方秘匿性(Perfect Forward Secrecy)を提供
- SSH-1とSSH-2は全く異なるプロトコル。SSH-1には既知の脆弱性があるため、現在では非推奨。SSH-2を使用すべき。
② ユーザー認証層(User Authentication Layer)
- RFC 4252 で定義
- 役割:クライアント(ユーザー)をサーバーに認証
- 各種認証方式をサポート
③ 接続層(Connection Layer)
- RFC 4254 で定義
- 役割:暗号化されたトンネルを複数の論理チャンネルに分割(マルチプレクス)
- 各チャンネルは独立したフロー制御を持つ
- shellセッション、ポートフォワーディング、SFTP、X11表示など多様なストリームを同時処理可能
4. SSHで可能なこと(主な用途)
| 用途 |
説明 |
| リモートシェル操作 |
サーバーのターミナルに安全に接続し、コマンドを実行 |
| 安全なファイル転送 |
SCP・SFTPを使用して暗号化されたファイル転送 |
| ポートフォワーディング(トンネリング) |
暗号化トンネル内のTCP通信を転送 |
| プライベートネットワークへのアクセス |
ファイアウォール内侧のサーバーに安全に接続 |
| クラウドサーバー管理 |
AWS、GCPなどの仮想マシンに安全にアクセス |
5. SSHの仕組み(接続プロセス)
SSH接続は以下の手順で確立される。
① 接続要求 → クライアントがサーバーへTCP接続(デフォルト:22番ポート)
② バージョンネゴ → 両者間でSSHバージョン番号を確認
③ 鍵交換 → ディフィー・ヘルマン等によるセッション鍵の生成
④ サーバー認証 → ホスト鍵により偽装サーバー(MITM)を防止
⑤ アルゴリズム選択 → 暗号化方式(AESなど)、ハッシュアルゴリズムを選定
⑥ ユーザー認証 → パスワード・公開鍵等多様式でユーザーを認証
⑦ セッション確立 → 暗号化された通信チャンネルが開かれ、操作可能に
6. 認証方式
| 方式 |
説明 |
| パスワード認証 |
ユーザー名とパスワードによる基本的な認証 |
| 公開鍵認証 |
公開鍵と秘密鍵のペアを用いた暗号ベースの認証(推奨) |
| ワンタイムパスワード |
OTPによる多要素認証 |
| Keyboard-Interactive |
インタラクティブな質問応答方式(2FA/MFA対応) |
| 証明書認証 |
企業のPKI環境などでのサーバー証明書を利用した認証 |
公開鍵認証の詳細
- SSH鍵ペアの生成:
ssh-keygen コマンドで生成
- 秘密鍵:クライアント側に保管(強力なパスフレーズ推奨)
- 公開鍵:サーバー側の
~/.ssh/authorized_keys に登録
- セキュリティが飛躍的に向上するため、最も推奨される方式
7. SSHポートフォワーディング(SSHトンネリング)
暗号化されたSSH接続を利用して、TCP通信を安全に転送する技術。3つの主要な種類がある。
| タイプ |
説明 |
| ローカルポートフォワーディング |
ローカルのポート → SSHトンネル経由 → リモートのポート |
| リモートポートフォワーディング |
リモートのポート → SSHトンネル経由 → ローカルのポート |
| ダイナミックポートフォワーディング |
SOCKSプロキシとして動作し、動的に複数の宛先に転送 |
具体的なユースケース
- ファイアウォールの制限を回避して内部サーバーに接続
- 暗号化されていないプロトコル(FTP等)をSSHトンネル経由で保護
- ローカルマシンのポートをインターネットに公開せずにクラウドサービスにアクセス
- プライベートネットワーク内のリソースへリモートアクセス
8. 主なソフトウェア実装
SSHサーバー
| ソフトウェア |
特徴 |
| OpenSSH (sshd) |
オープンソース、最も普及。Linux/macOS標準搭載 |
| SSH Tectia Server |
商用版、エンタープライズ向け |
| Dropbear |
リソース制限環境(組み込み等)用の軽量実装 |
SSHクライアント
| ソフトウェア |
OS |
| OpenSSH (ssh) |
マルチプラットフォーム(Linux/macOS標準、Windows 10以降にも搭載) |
| PuTTY |
Windows・UNIX対応のグラフィカルターミナル |
| Tera Term |
Windows向け日本語ターミナルエミュレータ |
| Xshell |
Windows用商業ターミナル |
| RLogin |
Windows用ターミナル(日本発祥) |
9. 暗号化アルゴリズム
主に使用される共通鍵暗号(对称键)
- AES-256-GCM(Advanced Encryption Standard、256bit)
- ChaCha20-Poly1305(モバイル・組み込み機器向けに向く)
- AES-256-CTR
- 三重量暗号(Triple DES) — 古く非推奨
ディフィー・ヘルマン鍵交換グループ
- diffie-hellman-group14-sha256
- curve25519-sha256(楕円曲線ベース)
ハッシュアルゴリズム
- SHA-2(SHA-256、SHA-384、SHA-512)
- 旧バージョンではSHA-1も使用されていたが現在では非推奨
10. SSHフィンガープリント
サーバーの公開鍵を識別するために使用されるハッシュ値(SHA-256等)。
- ホスト認証:クライアントが接続先のサーバーがなりすましでないことを確認するための仕組み
- 初回接続時、フィンガープリントを手動で確認し信頼する
~/.ssh/known_hosts に保存され、2回目以降は自動的に検証される
- サーバー再構成等でホスト鍵が変更された場合、「host key changed」警告が表示される(中間者攻撃の可能性也有)
代表的なSSH鍵の種類
| 種類 |
説明 |
| RSA |
従来の公開鍵暗号方式。長い鍵長が必要だが広く対応 |
| ECDSA |
楕円曲線暗号(Elliptic Curve)。RSAより短い鍵で同等レベルの強度 |
| Ed25519(EDDSA) |
楕円曲線ベースの新世代方式。短くても強いセキュリティ、高速処理。現在最も推奨 |
11. SSHと他のプロトコルの比較
SSH vs Telnet / FTP
| プロトコル |
暗号化 |
安全性 |
| Telnet |
なし(平文) |
低い。パスワードが盗聴される危険性大 |
| FTP |
なし(基本) |
低い。ID・パスワード露出のリスク |
| SSH/SCP/SFTP |
あり |
高い。全通信が暗号化 |
SSH vs SSL/TLS(HTTPS)
| 項目 |
SSH |
TLS(SSL) |
| 主な用途 |
リモートシェル操作・ファイル転送 |
ウェブブラウザ-サーバー間の通信保護 |
| OSI層 |
アプリケーション層 |
トランスポート層 |
| 暗号化対象 |
コマンドライン、ファイル等 |
HTTPトラフィック全体 |
SSH vs IPsec / VPN
| 項目 |
SSH |
IPsec / VPN |
| 適用範囲 |
特定のアプリケーションのみ |
ネットワーク全体のトラフィック |
| プロトコル |
TCPベース |
UDPまたはTCP |
| 速度 |
やや低速 |
高速(UDP使用時) |
| 用途 |
サーバー管理・ポートフォワーディング |
フルVPN接続 |
12. SSHのセキュリティリスクと対策
セキュリティリスク
- ブルートフォース攻撃:パスワード認証を総当たりされる可能性
- SSH鍵の盗難:秘密鍵が侵害された場合、不正アクセスできる
- 中間者攻撃(MITM):フィンガープリントを確認しない場合の危険性
- Terrapin Attack(2023年):SSH接続におけるハーフオープンMITM攻撃
- 設定ミス:rootログイン許可、weak暗号有効化等の誤設定
推奨されるセキュリティ対策
- 公開鍵認証の採用(パスワード認証の無効化)
- rootログインの禁止
- デフォルトポート(22番)の変更
- 定期的なソフトウェア更新・パッチ適用
- SSH鍵のローテーションと適切管理
- 秘密鍵への強力パスフレーズの設定
- sshguard等による失敗回数の制限
- アクセスログの監視
13. よく使用するSSHコマンド例
| コマンド |
説明 |
ssh user@hostname |
リモートサーバーへ接続 |
ssh -p port user@host |
ポート指定で接続 |
scp file.txt user@host:/path/ |
ファイルをコピー(SCP) |
sftp user@host |
安全なファイル転送セッション |
ssh-keygen -t ed25519 |
Ed25519鍵ペアを生成 |
ssh-copy-id user@host |
公開鍵をサーバーに配置 |
ssh -L local_port:remote:remote_port host |
ローカルポートフォワーディング |
ssh -R remote_port:local:host_port host |
リモートポートフォワーディング |
14. まとめ
SSHは、ネットワーク越しに安全にリモートコンピュータを操作するための標準プロトコルである。TelnetやFTPの平文通信の問題点を解決するために開発され、現在ではLinux/macOSの標準機能として広く普及している。暗号化・認証・整合性保護の3つの柱により信頼性の高い通信を実現し、サーバー管理・ファイル転送・トンネリング等多様な用途で使用されている。SSH-2を用い、公開鍵認証を採用し、定期メンテナンスを行うことがセキュリティ上不可欠である。
参考情報源
コメント