背景
リモートから Linux サーバーにログインするとき、一般的には SSH (Secure Shell) が使われます。SSH は通信を暗号化するため安全性が高いですが、単純なパスワード認証だけに頼っていると、総対試行攻撃やパスワード漏えのリスクが残ります。そこで推奨されるのが公開鍵認証方式です。公開鍵認証では、ユーザーが生成した公開鍵と秘密鍵のペアを利用し、秘密鍵を保持しているユーザーだけが認証される仕組みになっています。本記事では、公開鍵認証の設定方法とセキュリティを高めるためのポイントを紹介します。
手順
- 鍵ペアを生成する
まずはクライアント側で鍵ペアを作成します。ターミナルでssh-keygen -t ed25519 -C "[email protected]"を実行すると、より安全性の高い Ed25519 形式の鍵が生成されます。途中で保存先やパスフレーズを問われるので、デフォルトの~/.ssh/id_ed25519を選び、パスフレーズも設定しましょう。パスフレーズを設定することで、秘密鍵が盗まれた場合のリスクを低減できます。 - 公開鍵をサーバーに登録する
作成した公開鍵 (~/.ssh/id_ed25519.pub)をリモートサーバーに登録します。簡単な方法はssh-copy-idコマンドを使うことです。ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]を実行すると、公開鍵がサーバー側の~/.ssh/authorized_keysに追記されます。この時点で、SSH サーバーが公開鍵認証を受け付ける設定になっていれば、パスワードなしでログインできるようになります。 - SSH 設定でパスワード認証を無効にする
公開鍵認証が動作することを確認したら、サーバー側でパスワード認証を無効にしてさらに安全性を高めます。サーバーの/etc/ssh/sshd_configを編集し、PasswordAuthentication noやChallengeResponseAuthentication noを設定します。変更後はsudo systemctl reload sshdで SSH デーモンを再読み込んでください。これにより、公開鍵を持たないユーザーからのログイン試行は拒否されます。 - 鍵の管理とエージェントの活用
複数のサーバーやサービスを利用する場合、用途ごとに別々の鍵を生成し管理することが推奨されます。SSH エージェントを利用すると、起動中のセッションに秘密鍵をロードしておき、毎回パスフレーズを入力せずに認証できます。eval "$(ssh-agent -s)"でエージェントを起動し、ssh-add ~/.ssh/id_ed25519で鍵を追加します。必要に応じてタイムアウトを設定し、一定時間後に自動で鍵をアンロードすることも可能です。 - 追加のセキュリティ対策
公開鍵認証に加えて、SSH ポート番号をデフォルトの 22 番から変更したり、AllowUsersディレクティブで許可するユーザーを限定すると、不正アクセスのリスクを下げられます。さらに、fail2ban などのツールを実装して、定数以上のログイン失敗があった IP アドレスを自動でブロックする仕組みを構築すると安心です。
まとめ
SSH 公開鍵認証を対応につかうことで、パスワード認証よりも強固なリモートアクセス環境を構築できます。鍵ペアの生成からサーバーへの登録、パスワード認証の無効化までの手順を適切に行い、鍵の管理や追加のセキュリティ対策も使うことで、安全性と利便性を両立させましょう。普段から鍵の管理状況を見直し、不要になった鍵は削除するなど、運用の中でセキュリティ意識を高めることが重要です。