SSH鍵管理の基本:安全なペアの作り方・配置・権限設定

SSH鍵管理の基本:安全なペアの作り方・配置・権限設定

SSH鍵は適切な作成と設定、管理が重要です。SSH鍵の作り方から安全な配置、パーミッション設定、鍵のローテーションとバックアップまでを整理し、迷いやすいポイントとNGポイントを記載します。


はじめに

SSH鍵は「強力なパスワード+多要素」を代替する重要な認証手段です。鍵の生成・配置・権限・バックアップを正しく行うことで、なりすましや漏洩リスクを大きく減らせます。この記事では迷いやすいポイントをまとめます。

鍵の生成

推奨は Ed25519(軽量・高速・安全性が現行水準)です。以下で生成しましょう。パスフレーズは安全のため必ず設定してください。

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "your_email@example.com"

古い機器やFIPS環境でEd25519が使えない場合のみ、RSAを選びましょう(最低でも3072bit以上)。RSAは鍵長を伸ばさないと安全性が不足し、鍵長が長いほど計算が重くなるため、互換性理由がない限りEd25519を使ったほうがいいかと思います。

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -C "your_email@example.com"

配置場所とパーミッション

.ssh ディレクトリと鍵の権限を制限しましょう。

mkdir -p ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519.pub

Windowsの場合も同様に %USERPROFILE%\.ssh でACLを自分のみに設定してください。

公開鍵の登録(サーバー側)

公開鍵をサーバーの authorized_keys に追加しましょう(初回はファイルを作成)。

mkdir -p ~/.ssh
chmod 700 ~/.ssh
cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

既存鍵と区別するためにコメント(メールや用途)をつけましょう。例: ssh-ed25519 AAAA... user@example.com や ssh-ed25519 AAAA... deploy-prod@example.com。rootに直接登録せず通常ユーザー+sudo運用を基本にしてください。

禁止・NG例

やってはいけない代表例です。以下は避けましょう。

  • 秘密鍵をメールやチャットで送る。
  • 同じ秘密鍵を複数人で共有(個別に発行して管理)。
  • パスフレーズなし運用(自動化はエージェントや限定鍵で対応)。
  • 公開鍵・秘密鍵を混同して配布。

ローテーションとバックアップ

安全を保つための定期運用と保管の基本です。

  • ローテーション: 半年〜1年で鍵を再発行し、古い鍵は authorized_keys から削除。
  • バックアップ: 暗号化ZIPや安全なパスワードマネージャで保存。平文コピーはNG。
  • 万一漏洩・紛失時は即座に該当鍵を authorized_keys から削除し、新しい鍵を配布。

複数環境・用途別の分離

用途ごとに鍵を分けると事故を減らせます。

  • 業務/個人、環境(本番/検証)で鍵ペアを分ける。
  • Git用とサーバーSSH用を分け、~/.ssh/config で Host 毎に鍵を指定。
  • 例:Host prod-server HostName example.com User deploy IdentityFile ~/.ssh/id_ed25519_prod

トラブルシュートのチェックリスト

接続できないときに優先して確認しましょう。

  • パーミッション: .ssh が 700、秘密鍵が 600 か
  • 所有者: root ではなくログインユーザーか
  • authorized_keys の改行・余計な空白がないか
  • サーバー側の /etc/ssh/sshd_config で PubkeyAuthentication yes になっているか
  • known_hosts が壊れている場合は該当行を削除

まとめ

  • 鍵は「生成・配置・権限・ローテーション・バックアップ」をワンセットで管理する。
  • パスフレーズ+権限制限が基本。共有禁止・定期更新でリスクを下げる。
  • 用途別に鍵を分け、ssh_config で明示的に指定すると運用ミスを減らせる。

関連記事