SECURE · BROWSER-ONLY
パスワード生成.jp
Secure Password Generator
🛡 ブラウザ完結 🔐 Web Crypto API 📡 通信ゼロ

SSH鍵 vs パスワード——サーバー認証はどちらが安全で実用的か

SSHの公開鍵認証とパスワード認証の違いを安全性・運用コストで比較。SSH鍵の生成から設定まで実践的な手順も解説。

SSHとは何か

SSH(Secure Shell)はネットワーク越しにサーバーを安全に操作するためのプロトコルだよ。認証方式には大きく「パスワード認証」と「公開鍵認証」の2種類がある。

パスワード認証の問題点

リスク 内容
ブルートフォース攻撃 インターネット上のSSHサーバーには24時間自動攻撃が来ている
パスワード推測 弱いパスワードは数秒〜数分で突破される
フィッシング ソーシャルエンジニアリングでパスワードを盗まれる可能性
中間者攻撃 適切な検証をしないとパスワードを傍受される

実際に公開されているSSHポート(22番)には、毎日数百〜数千回の自動ログイン試行が来るよ。パスワード認証のままでは時間の問題だ。

SSH公開鍵認証の仕組み

  1. ローカルで公開鍵と秘密鍵のペアを生成する
  2. 公開鍵をサーバーの ~/.ssh/authorized_keys に登録する
  3. ログイン時にサーバーがランダムなチャレンジを送る
  4. クライアントが秘密鍵でチャレンジに署名して返す
  5. サーバーが公開鍵で署名を検証してログインを許可する

秘密鍵はネットワークに出ないので、たとえサーバーが侵害されても鍵を奪えない。

SSH鍵の生成手順

# Ed25519アルゴリズムで生成(推奨)
ssh-keygen -t ed25519 -C "[email protected]"

# パスフレーズを設定する(強く推奨)
# 生成された鍵:
#   ~/.ssh/id_ed25519      ← 秘密鍵(絶対に外に出さない)
#   ~/.ssh/id_ed25519.pub  ← 公開鍵(サーバーに配置する)

サーバー側の設定

# 公開鍵をサーバーに転送
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server

# /etc/ssh/sshd_config でパスワード認証を無効化
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no

パスワード認証を完全に無効化することで、ブルートフォース攻撃のリスクをゼロにできるよ。

アルゴリズム選択

アルゴリズム 推奨度 備考
Ed25519 最推奨 安全で高速、鍵が短い
ECDSA (P-256) 推奨 広くサポートされている
RSA 4096bit 許容 古いシステムとの互換性が必要な場合
DSA / RSA 1024 使用禁止 安全でない

パスワード認証との最終比較

比較軸 パスワード認証 SSH鍵認証
ブルートフォース耐性 極めて高い
フィッシング耐性 高い
管理コスト やや高い(鍵管理が必要)
自動化への適性 高い
推奨度 非推奨 強く推奨

サーバー管理を行うなら、SSH鍵認証への移行とパスワード認証の無効化は最優先で実施しよう。

● よくある質問
Q.SSH鍵はどこに保管すべき?
秘密鍵(id_ed25519など)はローカルの~/.sshディレクトリに保管して、パーミッションを600にするのが基本だよ。パスフレーズで秘密鍵自体を暗号化しておくと、鍵ファイルが盗まれても安心だね。
Q.SSH鍵を複数サーバーで使いまわしていい?
1つの鍵ペアを複数サーバーで使っても技術的には問題ないけど、鍵が漏洩した場合全サーバーにアクセスされるリスクがある。重要なサーバーには別々の鍵ペアを使うのがベストプラクティスだよ。
Q.GitHub・GitLabへの接続にはSSH鍵を使うべき?
HTTPSよりSSH鍵認証の方が推奨されるよ。特にCI/CD環境ではデプロイキー(特定リポジトリへのアクセスのみを許可した鍵)を使うとセキュリティがより高まるね。