SSH(Secure Shell)のまとめ

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を用い、公開鍵認証を採用し、定期メンテナンスを行うことがセキュリティ上不可欠である。


参考情報源

コメント

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