Linux SSH公開鍵認証の設定と管理|基礎から実践

Linux SSH公開鍵認証の設定と管理|基礎から実践
SSH公開鍵認証を正しく設定すれば、パスワード入力の手間をなくし、セキュリティを大幅に向上させられます。サーバー管理者であれば、公開鍵認証の仕組みと実践的な設定方法を理解しておくことが必須です。この記事では、SSH公開鍵認証の基礎理論から、具体的な設定手順、トラブルシューティングまで、実務で即活用できる知識を網羅的に解説します。
目次
SSH公開鍵認証とは
公開鍵認証を使うべき理由
SSH鍵ペアの生成方法
公開鍵をサーバーに配置する
SSHサーバーの設定変更
接続テストと動作確認
応用的な設定と管理
トラブルシューティング
ベストプラクティスとセキュリティ強化
よくある質問
まとめ
SSH公開鍵認証とは
SSH公開鍵認証は、暗号化された鍵ペア(公開鍵と秘密鍵)を用いてユーザー認証を行う仕組みです。従来のパスワード認証と比較して、以下の特徴があります。
- 高いセキュリティ:総当たり攻撃に対して耐性があります
- 自動化が容易:パスワード入力が不要でスクリプト処理に適しています
- 鍵の管理が重要:秘密鍵の漏洩は即座にセキュリティリスクに直結します
SSH公開鍵認証の仕組みは以下の通りです。
- クライアントは秘密鍵で署名を生成します
- サーバーは公開鍵で署名を検証します
- 検証に成功すれば認証が完了します
この仕組みにより、パスワードを送信する必要がなく、ネットワーク上で認証情報が盗まれるリスクを大幅に低減できます。
公開鍵認証を使うべき理由
SSH公開鍵認証を導入する主なメリットは以下の通りです。
| 比較項目 | パスワード認証 | 公開鍵認証 |
|---|---|---|
| セキュリティレベル | 低(総当たり攻撃に弱い) | 高(暗号化により安全) |
| 自動化のしやすさ | 難しい(パスワード入力が必要) | 容易(鍵ベースで認証) |
| 管理コスト | 低(設定が簡単) | 中(鍵の管理が必要) |
| パスワード変更頻度 | 定期的な変更が推奨 | 鍵のローテーションで対応可能 |
特に企業や個人サーバーで複数のユーザーを管理する場合、公開鍵認証は必須のセキュリティ対策と言えます。IPAのセキュリティ脆弱性調査(2022年度)によると、SSHサーバーへの不正アクセスの多くはパスワード認証に起因しており、公開鍵認証への移行が強く推奨されています。
SSH鍵ペアの生成方法
SSH鍵ペアを生成するには、ssh-keygenコマンドを使用します。以下に基本的な手順を示します。
1. 鍵ペアの生成
ターミナルを開き、以下のコマンドを実行します。
ssh-keygen -t ed25519 -C "your_email@example.com"このコマンドは以下の設定で鍵ペアを生成します。
- 暗号化方式:ed25519(推奨)
- コメント:鍵の用途や所有者を識別するための任意のテキスト
実行すると以下のようなプロンプトが表示されます。
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
2. 鍵ファイルの保存場所
鍵ファイルは通常、以下のディレクトリに保存されます。
- 秘密鍵:
~/.ssh/id_ed25519(デフォルト) - 公開鍵:
~/.ssh/id_ed25519.pub(デフォルト)
鍵ファイルのパーミッションは以下のように設定する必要があります。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 644 ~/.ssh/authorized_keysこれらのパーミッション設定はセキュリティ上非常に重要です。秘密鍵のパーミッションは600(所有者のみ読み書き可)に設定してください。
3. 鍵の種類と特徴
SSHで使用できる鍵の種類には以下のものがあります。
| 鍵タイプ | 特徴 | 推奨度 | 鍵長 |
|---|---|---|---|
| ed25519 | 高速で安全性が高い。最新の標準規格 | ★★★★★ | 256ビット |
| rsa | 広く普及しているが、処理が遅い | ★★★☆☆ | 2048ビット以上 |
| ecdsa | 楕円曲線暗号。安全性は高いが互換性に注意 | ★★★☆☆ | 256ビット以上 |
ed25519を使用することを強く推奨します。これはNIST(米国立標準技術研究所)によっても安全性が認められており、処理速度も優れています。RSA鍵を使用する場合は、少なくとも2048ビット以上の長さを確保してください。
4. パスフレーズの設定
鍵生成時にパスフレーズを設定することで、秘密鍵のさらなる保護が可能です。パスフレーズは以下の特徴があります。
- 利点:秘密鍵が盗まれても、パスフレーズがなければ使用できません
- 欠点:毎回入力が必要で利便性が低下します
パスフレーズは10文字以上で、大文字・小文字・数字・記号を含む複雑なものを設定することを推奨します。
公開鍵をサーバーに配置する
生成した公開鍵をサーバーに配置する方法には、主に以下の3つがあります。
1. ssh-copy-idコマンドを使用する方法
最も簡単な方法はssh-copy-idコマンドを使用することです。以下のコマンドで公開鍵をサーバーにコピーできます。
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-ipこのコマンドは以下の処理を行います。
- 公開鍵をサーバーの
~/.ssh/authorized_keysに追加 - 必要に応じて
.sshディレクトリとauthorized_keysファイルを作成 - パーミッションを自動的に設定
注意点:ssh-copy-idコマンドが利用できない場合は、手動で公開鍵を配置する必要があります。
2. 手動で公開鍵を配置す…
手動で公開鍵を配置する場合は、以下の手順で行います。
手順1:公開鍵の内容を確認
cat ~/.ssh/id_ed25519.pub出力例:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMJvKqQ3X5X7Y8Z9W0X1Y2Z3A4B5C6D7E8F9G0H1I2 user@email.com手順2:サーバーに接続
ssh user@server-ip手順3:公開鍵をauthorized_keysに追加
mkdir -p ~/.ssh
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMJvKqQ3X5X7Y8Z9W0X1Y2Z3A4B5C6D7E8F9G0H1I2 user@email.com" >> ~/.ssh/authorized_keys手順4:パーミッションを設定
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys3. 複数の公開鍵を管理す…
複数のユーザーやデバイスからアクセスする場合、authorized_keysファイルに複数の公開鍵を追加します。各行に1つの公開鍵を記述します。
また、~/.ssh/authorized_keysファイルには以下のオプションを追加できます。
- from=”ip-address”:特定のIPアドレスからのみ接続を許可
- command=”command”:特定のコマンドのみ実行を許可
- no-port-forwarding:ポートフォワーディングを禁止します
例:
from="192.168.1.100" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMJvKqQ3X5X7Y8Z9W0X1Y2Z3A4B5C6D7E8F9G0H1I2 user@email.comSSHサーバーの設定変更
SSHサーバー(sshd)の設定を変更することで、公開鍵認証を有効にし、セキュリティを強化できます。設定ファイルは通常/etc/ssh/sshd_configにあります。
1. 設定ファイルの編集
設定ファイルを編集するには、以下のコマンドを使用します。
sudo vi /etc/ssh/sshd_config以下のパラメータを確認・設定します。
| パラメータ | 設定値 | 説明 |
|---|---|---|
| PubkeyAuthentication | yes | 公開鍵認証を有効化 |
| PasswordAuthentication | no | パスワード認証を無効化(推奨) |
| ChallengeResponseAuthentication | no | チャレンジレスポンス認証を無効化 |
| UsePAM | no | PAM(Pluggable Authentication Modules)を無効化 |
| PermitRootLogin | prohibit-password | rootユーザーの直接ログインを禁止(鍵認証のみ許可) |
重要:設定を変更した後は、必ずsshdサービスを再起動してください。
sudo systemctl restart sshd2. セキュリティ強化のた…
基本的な設定に加えて、以下のセキュリティ強化設定を追加することを推奨します。
| パラメータ | 設定値 | 説明 |
|---|---|---|
| MaxAuthTries | 3 | 認証試行回数の制限 |
| LoginGraceTime | 60 | ログイン猶予時間(秒) |
| ClientAliveInterval | 300 | クライアント生存確認の間隔(秒) |
| ClientAliveCountMax | 2 | 生存確認に応答しない場合の最大回数 |
| AllowUsers | user1 user2 | 特定のユーザーのみ接続を許可 |
これらの設定により、SSHサーバーへの不正アクセスを大幅に防ぐことができます。
3. SSHポートの変更
デフォルトのSSHポート(22)は攻撃者に狙われやすいため、ポート番号を変更することを推奨します。
設定ファイルで以下の行を追加します。
Port 2222ポートを変更した場合は、ファイアウォールの設定も更新する必要があります。
sudo ufw allow 2222/tcp注意:ポートを変更する場合は、必ず新しいポートで接続できることを確認してから古いポートを閉じてください。
接続テストと動作確認
SSH公開鍵認証の設定が完了したら、実際に接続テストを行います。以下の手順で動作を確認します。
1. 接続テスト
以下のコマンドでSSH接続を試みます。
ssh -i ~/.ssh/id_ed25519 user@server-ip -p 2222接続に成功すると、以下のようなプロンプトが表示されます。
Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-76-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Last login: Mon Jan 1 00:00:00 2024 from 192.168.1.100
user@server:~$2. 接続ログの確認
SSH接続のログは/var/log/auth.log(Ubuntu/Debian系)または/var/log/secure(RHEL/CentOS系)で確認できます。
sudo tail -f /var/log/auth.log接続成功時のログ例:
Jan 1 00:00:00 server sshd[1234]: Accepted publickey for user from 192.168.1.100 port 12345 ssh2: RSA SHA256:abcdef...3. 接続トラブルの診断
接続に失敗した場合は、以下の点を確認します。
| 確認項目 | 確認方法 | 解決策 |
|---|---|---|
| 秘密鍵のパーミッション | ls -l ~/.ssh/id_ed25519 | chmod 600 ~/.ssh/id_ed25519 |
| 公開鍵の配置 | cat ~/.ssh/authorized_keys | 公開鍵が正しく追加されているか確認 |
| sshd_configの設定 | sudo grep PubkeyAuthentication /etc/ssh/sshd_config | PubkeyAuthenticationがyesになっているか確認 |
| ファイアウォール設定 | sudo ufw status | SSHポートが開放されているか確認 |
| ポート番号の一致 | ssh -v -i ~/.ssh/id_ed25519 user@server-ip | 接続に使用するポートが正しいか確認 |
接続に失敗した場合は、ssh -vコマンドで詳細なデバッグ情報を取得できます。
ssh -v -i ~/.ssh/id_ed25519 user@server-ip応用的な設定と管理
基本的な設定が完了したら、より高度な設定や管理方法について学びましょう。
1. 鍵のローテーション
定期的な鍵のローテーションはセキュリティを維持するために重要です。鍵のローテーション手順は以下の通りです。
- 新しい鍵ペアを生成します
- 新しい公開鍵をサーバーの
authorized_keysに追加します - 古い公開鍵を
authorized_keysから削除します - 古い秘密鍵を削除します
鍵のローテーションは少なくとも年に1回、またはセキュリティインシデントが発生した場合に実施することを推奨します。
2. 複数の鍵を使い分ける
用途に応じて複数の鍵ペアを使い分けることで、セキュリティをさらに強化できます。
| 用途 | 鍵タイプ | 保存場所 | 注意事項 |
|---|---|---|---|
| 日常的な作業 | ed25519 | ローカルPC | パスフレーズ付きで管理 |
| バックアップサーバー | rsa 4096bit | 専用USBドライブ | 物理的なセキュリティに注意 |
| CI/CDパイプライン | ed25519 | 専用サーバー | 鍵の権限を厳格に管理 |
3. SSHエージェントの活用
SSHエージェントを使用すると、パスフレーズの入力を1回で済ませ、複数のSSH接続を簡単に管理できます。
SSHエージェントの起動
eval "$(ssh-agent -s)"秘密鍵の追加
ssh-add ~/.ssh/id_ed25519これにより、一度パスフレーズを入力すれば、そのセッション内で複数のSSH接続が可能になります。
4. 2要素認証の導入
SSHに2要素認証(2FA)を導入することで、さらにセキュリティを強化できます。一般的な方法は以下の通りです。
- Google AuthenticatorなどのOTP(ワンタイムパスワード)アプリをインストール
libpam-google-authenticatorをインストール- Google AuthenticatorでQRコードをスキャンして設定
- sshd_configに以下の設定を追加
AuthenticationMethods publickey,keyboard-interactive
ChallengeResponseAuthentication yes
UsePAM yesこれにより、SSH接続時に公開鍵認証に加えて、OTPコードの入力が求められます。
トラブルシューティング
SSH公開鍵認証の設定や運用中に発生する可能性のある問題とその解決策をまとめます。
1. 接続できない
症状:SSH接続に失敗する
原因と解決策:
- 秘密鍵のパーミッションが不適切
- 解決策:
chmod 600 ~/.ssh/id_ed25519
- 解決策:
- 公開鍵が正しく配置されていない
- 解決策:
~/.ssh/authorized_keysに公開鍵が正しく追加されているか確認
- 解決策:
- sshd_configの設定が間違っている
- 解決策:
PubkeyAuthentication yesとPasswordAuthentication noが設定されているか確認
- 解決策:
- ファイアウォールでSSHポートがブロックされている
- 解決策:ファイアウォールの設定を確認し、SSHポートを開放
2. パスフレーズを毎回入…
症状:秘密鍵にパスフレーズを設定したため、毎回入力が必要
解決策:SSHエージェントを使用します。
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519これにより、一度パスフレーズを入力すれば、そのセッション内で複数のSSH接続が可能になります。
3. 鍵が古くなった
症状:鍵の有効期限が切れた、またはセキュリティ上の懸念がある
解決策:鍵のローテーションを行います。
- 新しい鍵ペアを生成
- 新しい公開鍵をサーバーに配置
- 古い公開鍵を
authorized_keysから削除 - 古い秘密鍵を削除
4. 接続が切断される
症状:SSH接続が一定時間後に切断される
原因と解決策:
- アイドルタイムアウト
- 解決策:
ClientAliveIntervalとClientAliveCountMaxを調整
- 解決策:
- ネットワークの不安定さ
- 解決策:ネットワーク接続を確認し、必要に応じて再接続
5. 秘密鍵が漏洩した
症状:秘密鍵が第三者に漏洩した可能性がある
緊急対応:
- 直ちにサーバーの
authorized_keysから該当の公開鍵を削除 - 秘密鍵を無効化し、新しい鍵ペアを生成
- サーバーのsshd_configを再設定し、sshdを再起動
- システム全体のセキュリティ監査を実施
予防策:
- 秘密鍵は暗号化されたストレージに保管
- 鍵のバックアップは厳重に管理
- 定期的なセキュリティ監査を実施
ベストプラクティスとセキュリティ強化
SSH公開鍵認証を安全かつ効果的に運用するためのベストプラクティスを紹介します。
1. 鍵管理のベストプラク…
- 秘密鍵の保護
- 秘密鍵は暗号化されたストレージに保管
- 物理的なセキュリティにも注意(USBドライブなど)
- バックアップは暗号化して別の場所に保管
- 鍵の分離
- 用途ごとに異なる鍵ペアを使用
- 個人用、業務用、バックアップ用など用途別に管理
- 鍵のローテーション
- 少なくとも年に1回は鍵をローテーション
- セキュリティインシデント発生時は直ちにローテーション
2. サーバー設定のベスト…
- 最小権限の原則
- 必要なユーザーのみSSH接続を許可
AllowUsersやDenyUsersを活用
- ポートセキュリティ
- SSHポートを22から変更(例:2222)
- ファイアウォールで特定のIPアドレスからのみ接続を許可
- 監査ログの有効化
- SSH接続のログ【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。ABOUT ME
- SSH接続のログ




