Secure Shell (SSH) は、リモート・システムを安全に管理しアクセスするための、最も広く使われているツールの1つである。安全性が低く、ブルートフォース攻撃を受けやすい従来のパスワード・ベースの認証に頼る代わりに、システム管理者は、より優れたセキュリティ、スケーラビリティ、および自動化のために、SSHキー・ベースの認証を構成することが多い。

このガイドでは、ssh-keygen を使用して SSH 鍵を生成する方法、ssh-copy-id を使用して鍵をリモート・サーバに安全にコピーする方法、構成を検証する方法、およびセキュリティのベスト・プラクティスに従う方法について説明します。

SSH 鍵ベースの認証について理解する

SSH鍵では、公開鍵と秘密鍵のペアを使った認証が行われます:

  • 秘密鍵 (id_rsa) → ローカル・マシンに置かれ、保護されている必要がある。
  • 公開鍵 (id_rsa.pub) → リモート・サーバーの ~/.ssh/authorized_keys に置かれる。
  • 接続時に、SSH は公開鍵暗号方式を使用して、パスワードを公開することなく自動的に認証します。

この方法は、特に開発者、システム管理者、自動デプロイメントにとって、より安全 でより便利です。

ssh-keygen による SSH キーの生成

以下のコマンドを実行して、新しいSSH鍵ペアを生成します:

ssh-keygen -t rsa -b 4096 -C"your_email@example.com"

オプションの説明

  • t rsa→ 暗号化アルゴリズム(RSA)を指定する。
  • b 4096→ より強力な暗号化のために4096ビットの鍵を使用する(推奨)。
  • C→ 鍵を識別するためのコメントを追加します(通常は電子メールまたはユーザー名)。

対話型プロンプト

  • キーを保存するファイルEnterを押してデフォルトを受け入れる:
    ~/.ssh/id_rsa

  • パスフレーズ(オプションだが推奨)セキュリティのレイヤーを追加する。
    設定した場合、秘密鍵を使用する際に入力する必要があります。

公開鍵をリモートサーバにコピーする (ssh-copy-id)

鍵が生成されたら、ssh-copy-id を使用して公開鍵をリモートサーバに転送します:

ssh-copy-id user@remote-server
  • user→ リモートサーバのユーザ名。
  • remote-server→ リモートマシンのホスト名または IP アドレス。

このコマンドは

  • あなたの公開鍵(id_rsa.pub)をサーバーのものに追加します:

    ~/に追加します。
  • .ssh ディレクトリと鍵ファイルの正しいパーミッションを自動的に設定します。

代替方法(手動セットアップ)

ssh-copy-idが利用できない場合は、手動で鍵をコピーすることができます:

cat~/.ssh/id_rsa.pub | ssh user@remote-server"mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

このコマンドは

  • .ssh ディレクトリがない場合は作成します。
  • 公開鍵を追加します。
  • 安全なアクセス許可を設定します。

SSH 鍵認証の確認

すべての動作を確認する

ssh user@リモートサーバー
  • 正しく設定されていれば、パスワードを入力しなくてもログインできるはずです。

  • パスフレーズが設定されている場合は、代わりにその入力を求められます。

セキュリティのベストプラクティス

a) 強力な暗号化の使用

  • RSA 4096またはEd25519 を使用してください:

    ssh-keygen -t ed25519 -C"your_email@example.com"
  • Ed25519 鍵の方が小さく、高速で、安全です。

b) 鍵ファイルのアクセス許可を制限する

chmod700 ~/.ssh
chmod600 ~/.ssh/id_rsa
chmod644 ~/.ssh/id_rsa.pub

パーミッションが開きすぎていると、SSHは鍵の使用を拒否します。

c) パスワード認証を無効にする(オプション、推奨)

リモートサーバで

sudo nano /etc/ssh/sshd_config

設定します:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes

それからSSHを再起動します:

sudo systemctl restart ssh

d) パスフレーズ管理にSSHエージェントを使う

パスフレーズを毎回入力する代わりに、ssh-agentを使います:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

これでセッション用の鍵がキャッシュされます。

よくある問題のトラブルシューティング

問題点考えられる原因解決方法
パスワードを要求されるパーミッションが間違っているか、キーがない~/.sshのpermsとauthorized_keysを確認してください。
“Permission denied” エラーユーザー名またはIPが間違っている正しいログイン認証情報を確認する
ssh-copy-idが見つからないユーティリティが見つからないsudo apt install openssh-client でインストールしてください。
キーが無視されたファイルのパーミッションが許可されすぎているchmod 600 ~/.ssh/id_rsa を実行してください。

結論

ssh-keygen および ssh-copy-id を使用することで、リモートサーバを管理する際の セキュリティと利便性が向上します。SSH 鍵認証を設定することで、管理者はパスワードベースのログインに関連するリスクを排除し、安全なアクセスを効率化することができます。