エレクトロニクス

SSH公開鍵認証で安全にLinuxサーバーへ接続する方法

背景

リモートから Linux サーバーにログインするとき、一般的には SSH (Secure Shell) が使われます。SSH は通信を暗号化するため安全性が高いですが、単純なパスワード認証だけに頼っていると、総対試行攻撃やパスワード漏えのリスクが残ります。そこで推奨されるのが公開鍵認証方式です。公開鍵認証では、ユーザーが生成した公開鍵と秘密鍵のペアを利用し、秘密鍵を保持しているユーザーだけが認証される仕組みになっています。本記事では、公開鍵認証の設定方法とセキュリティを高めるためのポイントを紹介します。

手順

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

まとめ

SSH 公開鍵認証を対応につかうことで、パスワード認証よりも強固なリモートアクセス環境を構築できます。鍵ペアの生成からサーバーへの登録、パスワード認証の無効化までの手順を適切に行い、鍵の管理や追加のセキュリティ対策も使うことで、安全性と利便性を両立させましょう。普段から鍵の管理状況を見直し、不要になった鍵は削除するなど、運用の中でセキュリティ意識を高めることが重要です。

  • この記事を書いた人

たけぞう

熊谷に住みながら都内のIT企業でエンジニアをしています。ガジェットやアウトドア用品についてレビューをしていきます。 趣味はスポーツジムでトレーニングやジョギングをすることです。

-エレクトロニクス