Linuxサーバーを運用するうえで、SSH(Secure Shell)による安全な接続は必須の知識です。
特に、パスワード認証ではなく鍵認証を利用することで、セキュリティレベルを大幅に向上させることができます。
本記事では、SSHの基本から、鍵認証の仕組み、実際の設定手順、セキュリティ強化のポイントまでを体系的に解説します。
SSHとは何か
SSH(Secure Shell)とは、ネットワーク越しに安全にサーバーへ接続・操作するためのプロトコルです。
SSHを使うことで、以下が可能になります。
- サーバーへのリモートログイン
- コマンドの実行
- ファイル転送(scp / sftp)
- ポートフォワーディング
通信内容はすべて暗号化されるため、盗聴や改ざんのリスクを抑えられます。
パスワード認証の問題点
SSHの初期設定では、ユーザー名+パスワードによる認証が使われることが多いですが、以下のリスクがあります。
- 総当たり攻撃(ブルートフォースアタック)
- 弱いパスワードの使用
- パスワード漏えい時の即侵入
これらを防ぐために推奨されるのが鍵認証です。
鍵認証の仕組み
SSH鍵認証では、以下の2つの鍵を使用します。
- 秘密鍵(private key):自分のPCに保管(絶対に外部に出さない)
- 公開鍵(public key):接続先サーバーに配置
接続時の流れは次の通りです。
- クライアントが接続要求
- サーバーが公開鍵に対応する秘密鍵を持っているか確認
- 一致すれば認証成功
パスワードを送信しないため、非常に安全です。
SSH鍵ペアの作成(クライアント側)
まずは、接続元のPCで鍵ペアを作成します。
ssh-keygen -t ed25519
主な質問項目は以下の通りです。
- 保存先(Enterでデフォルト)
- パスフレーズ(設定推奨)
作成されるファイル例
~/.ssh/id_ed25519(秘密鍵)~/.ssh/id_ed25519.pub(公開鍵)
公開鍵をサーバーに登録する
方法1:ssh-copy-id(推奨)
ssh-copy-id user@server_ip
これにより、公開鍵が自動でサーバーの以下に追加されます。
~/.ssh/authorized_keys
方法2:手動で設定する場合
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
鍵認証でSSH接続する
鍵が正しく設定されていれば、次のコマンドでログインできます。
ssh user@server_ip
パスワード入力を求められず、鍵(+パスフレーズ)で認証されます。
SSH設定のセキュリティ強化
SSH設定ファイルの編集
sudo nano /etc/ssh/sshd_config
以下の設定を推奨します。
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
設定後、SSHを再起動します。
sudo systemctl restart sshd
⚠ 注意
鍵認証でログインできることを確認してから、パスワード認証を無効化してください。
よくあるトラブルと対処法
Permission denied (publickey)
~/.sshやauthorized_keysのパーミッション不正- 公開鍵が正しく登録されていない
鍵ファイルの権限エラー
chmod 600 ~/.ssh/id_ed25519
まとめ
SSH鍵認証を導入することで、以下のメリットがあります。
- パスワード不要で安全
- 不正ログイン対策として非常に有効
- サーバー運用の基本スキルとして必須
Linuxサーバーを扱うなら、SSH鍵認証+パスワード認証無効化は最低限実施しておきたい設定です。

