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鍵ペアを生成します:
オプションの説明
- –t rsa→ 暗号化アルゴリズム(RSA)を指定する。
- –b 4096→ より強力な暗号化のために4096ビットの鍵を使用する(推奨)。
- –C→ 鍵を識別するためのコメントを追加します(通常は電子メールまたはユーザー名)。
対話型プロンプト
キーを保存するファイル→Enterを押してデフォルトを受け入れる:
~/.ssh/id_rsaパスフレーズ(オプションだが推奨)→セキュリティのレイヤーを追加する。
設定した場合、秘密鍵を使用する際に入力する必要があります。
公開鍵をリモートサーバにコピーする (ssh-copy-id)
鍵が生成されたら、ssh-copy-id を使用して公開鍵をリモートサーバに転送します:
- user→ リモートサーバのユーザ名。
- remote-server→ リモートマシンのホスト名または IP アドレス。
このコマンドは
あなたの公開鍵(id_rsa.pub)をサーバーのものに追加します:
.ssh ディレクトリと鍵ファイルの正しいパーミッションを自動的に設定します。
代替方法(手動セットアップ)
ssh-copy-idが利用できない場合は、手動で鍵をコピーすることができます:
このコマンドは
- .ssh ディレクトリがない場合は作成します。
- 公開鍵を追加します。
- 安全なアクセス許可を設定します。
SSH 鍵認証の確認
すべての動作を確認する
正しく設定されていれば、パスワードを入力しなくてもログインできるはずです。
パスフレーズが設定されている場合は、代わりにその入力を求められます。
セキュリティのベストプラクティス
a) 強力な暗号化の使用
RSA 4096またはEd25519 を使用してください:
Ed25519 鍵の方が小さく、高速で、安全です。
b) 鍵ファイルのアクセス許可を制限する
パーミッションが開きすぎていると、SSHは鍵の使用を拒否します。
c) パスワード認証を無効にする(オプション、推奨)
リモートサーバで
設定します:
PasswordAuthentication noChallengeResponseAuthentication no
UsePAM yesそれからSSHを再起動します:
d) パスフレーズ管理にSSHエージェントを使う
パスフレーズを毎回入力する代わりに、ssh-agentを使います:
これでセッション用の鍵がキャッシュされます。
よくある問題のトラブルシューティング
| 問題点 | 考えられる原因 | 解決方法 |
|---|---|---|
| パスワードを要求される | パーミッションが間違っているか、キーがない | ~/.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 鍵認証を設定することで、管理者はパスワードベースのログインに関連するリスクを排除し、安全なアクセスを効率化することができます。


