【図解】SSH鍵の作り方と設定方法|初心者向け完全ガイド


【図解】SSH鍵の作り方と設定方法|初心者向け完全ガイド

SSH(Secure Shell)は、ネットワーク経由で安全にコンピュータにアクセスするためのプロトコルです。パスワード認証よりも安全なSSH鍵認証を利用することで、セキュリティを大幅に向上させることができます。この記事では、SSH鍵の作成から設定、そして運用までを初心者にもわかりやすく解説します。図解を交えながら、各ステップを丁寧に説明するので、安心して読み進めてください。

1. SSH鍵認証とは?パスワード認証との違い

SSH鍵認証は、公開鍵暗号方式を利用した認証方法です。秘密鍵と公開鍵のペアを作成し、サーバーに公開鍵を登録することで、クライアントは秘密鍵を使ってサーバーに安全に接続できます。

1.1. パスワード認証の仕組みとリスク

パスワード認証では、サーバーに接続する際にユーザー名とパスワードを入力します。これは最も基本的な認証方法ですが、以下のようなリスクがあります。

  • ブルートフォース攻撃: 攻撃者が総当たりでパスワードを試すことで、不正アクセスを試みる。
  • 辞書攻撃: 一般的な単語やフレーズを含む辞書を使ってパスワードを推測する。
  • パスワードの使い回し: 複数のサービスで同じパスワードを使用している場合、一つのサービスが侵害されると他のサービスも危険にさらされる。
  • 中間者攻撃: 通信経路を傍受し、パスワードを盗む。

1.2. SSH鍵認証の仕組みとメリット

SSH鍵認証では、以下の手順で認証が行われます。

  1. 鍵ペアの生成: クライアント側で秘密鍵と公開鍵のペアを生成する。
  2. 公開鍵の登録: 公開鍵をサーバーの~/.ssh/authorized_keysファイルに登録する。
  3. 接続: クライアントがサーバーに接続を試みる。
  4. チャレンジ: サーバーはクライアントにチャレンジを送信する。
  5. 署名: クライアントは秘密鍵を使ってチャレンジに署名し、サーバーに送信する。
  6. 認証: サーバーは公開鍵を使って署名を検証し、認証に成功すれば接続を許可する。

SSH鍵認証のメリットは以下の通りです。

  • セキュリティの向上: パスワードをネットワーク経由で送信しないため、傍受される心配がない。また、ブルートフォース攻撃や辞書攻撃にも強い。
  • 利便性の向上: パスワードを入力する手間が省ける。
  • 自動化: スクリプトや自動化ツールで安全にサーバーにアクセスできる。

(図1: パスワード認証とSSH鍵認証の比較図)

2. SSH鍵の作成

SSH鍵を作成する手順は、使用するOSによって異なりますが、基本的な流れは同じです。ここでは、Linux/macOSとWindowsでの作成方法を解説します。

2.1. Linux/macOSでのSSH鍵作成

Linux/macOSでは、ターミナルを使用してSSH鍵を作成します。

  1. ターミナルの起動: ターミナルを開きます。
  2. ssh-keygenコマンドの実行: 以下のコマンドを実行します。

    bash
    ssh-keygen -t rsa -b 4096 -C "[email protected]"

    • -t rsa: 鍵の種類をRSAに指定します。RSAは一般的で安全な鍵の種類です。
    • -b 4096: 鍵のビット数を4096に指定します。ビット数が大きいほどセキュリティが高くなります。
    • -C "[email protected]": コメントとしてメールアドレスを指定します。これは必須ではありませんが、鍵の識別に使用できます。
  3. 保存場所の指定: 鍵の保存場所を聞かれるので、デフォルトの~/.ssh/id_rsaでEnterキーを押すのが一般的です。別の場所に保存したい場合は、パスを入力します。

  4. パスフレーズの設定: パスフレーズの設定を求められます。パスフレーズは、秘密鍵を保護するためのパスワードです。設定しておくと、秘密鍵が漏洩した場合でも、パスフレーズを知らない第三者は秘密鍵を使用できません。安全性を高めるために、強力なパスフレーズを設定することを推奨します。パスフレーズを設定しない場合は、Enterキーを2回押します。

    (図2: ssh-keygenコマンドの実行画面)

  5. 鍵の確認: 以下のコマンドで、秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が作成されたことを確認します。

    bash
    ls -l ~/.ssh

2.2. WindowsでのSSH鍵作成

Windowsでは、以下のいずれかの方法でSSH鍵を作成できます。

  • Git Bash: Git for Windowsに含まれるGit Bashを使用する方法。
  • PuTTYgen: PuTTYに含まれるPuTTYgenを使用する方法。
  • Windows Subsystem for Linux (WSL): WSLをインストールして、Linuxと同様の方法で作成する方法。
  • OpenSSH Client: Windows 10以降に標準搭載されているOpenSSH Clientを使用する方法。

ここでは、OpenSSH Clientを使用した方法を解説します。

  1. PowerShellの起動: PowerShellを管理者として起動します。
  2. ssh-keygenコマンドの実行: 以下のコマンドを実行します。

    powershell
    ssh-keygen -t rsa -b 4096 -C "[email protected]"

    パラメータの意味はLinux/macOSの場合と同じです。

  3. 保存場所の指定: 鍵の保存場所を聞かれるので、デフォルトのC:\Users\username\.ssh\id_rsaでEnterキーを押すのが一般的です。別の場所に保存したい場合は、パスを入力します。

  4. パスフレーズの設定: パスフレーズの設定を求められます。Linux/macOSの場合と同様に、強力なパスフレーズを設定することを推奨します。
  5. 鍵の確認: 以下のコマンドで、秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が作成されたことを確認します。

    powershell
    ls -l C:\Users\username\.ssh

(図3: Windows PowerShellでのssh-keygenコマンドの実行画面)

3. SSH鍵の設定:サーバーへの公開鍵の登録

作成した公開鍵をサーバーに登録することで、SSH鍵認証が利用できるようになります。

3.1. 公開鍵のコピー

公開鍵(id_rsa.pub)の内容をサーバーにコピーする必要があります。以下のいずれかの方法でコピーできます。

  • catコマンド: ターミナルでcat ~/.ssh/id_rsa.pubコマンドを実行し、表示された内容をコピーする。
  • scpコマンド: scp ~/.ssh/id_rsa.pub user@server_ip:/tmp/コマンドで公開鍵をサーバーにコピーする。
  • テキストエディタ: テキストエディタでid_rsa.pubファイルを開き、内容をコピーする。

(図4: 公開鍵の内容を表示)

3.2. サーバーへの公開鍵の登録

サーバーにログインし、以下の手順で公開鍵を登録します。

  1. ~/.sshディレクトリの作成: サーバーに.sshディレクトリが存在しない場合は、作成します。

    bash
    mkdir -p ~/.ssh

  2. authorized_keysファイルの作成または編集: ~/.ssh/authorized_keysファイルを作成または編集します。

    • ファイルが存在しない場合は、新規作成します。

      bash
      touch ~/.ssh/authorized_keys

    • ファイルが存在する場合は、追記モードで開きます。

  3. 公開鍵の貼り付け: コピーした公開鍵の内容を~/.ssh/authorized_keysファイルに貼り付けます。

    • catコマンドとリダイレクトを使用する方法:

      bash
      cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

    • テキストエディタを使用する方法:

      bash
      vi ~/.ssh/authorized_keys

      viエディタでiキーを押して挿入モードにし、公開鍵を貼り付けます。その後、Escキーを押してコマンドモードに戻り、:wqと入力して保存して閉じます。

  4. パーミッションの設定: ~/.sshディレクトリと~/.ssh/authorized_keysファイルのパーミッションを適切に設定します。

    bash
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

    これらのパーミッション設定はセキュリティ上非常に重要です。~/.sshディレクトリは自分のみがアクセスできるようにし、~/.ssh/authorized_keysファイルは自分のみが読み書きできるようにします。

(図5: authorized_keysファイルへの公開鍵の登録)

3.3. 設定の確認

公開鍵の登録が完了したら、SSH鍵認証でサーバーにログインできることを確認します。

bash
ssh user@server_ip

パスフレーズを設定している場合は、パスフレーズの入力を求められます。パスフレーズを入力してログインできれば、SSH鍵認証の設定は成功です。

4. SSH設定ファイルの編集:セキュリティ強化と利便性向上

SSHの設定ファイル(~/.ssh/config)を編集することで、SSHのセキュリティを強化したり、利便性を向上させたりすることができます。

4.1. SSH設定ファイルの場所

SSH設定ファイルは、以下の場所にあります。

  • システム全体の設定: /etc/ssh/ssh_config (クライアント側), /etc/ssh/sshd_config (サーバー側)
  • ユーザーごとの設定: ~/.ssh/config (クライアント側)

通常は、ユーザーごとの設定ファイル(~/.ssh/config)を編集します。

4.2. 設定ファイルの編集例

以下は、SSH設定ファイルの編集例です。

Host alias
HostName server_ip_address
User username
Port 22
IdentityFile ~/.ssh/id_rsa
TCPKeepAlive yes
ServerAliveInterval 60
ServerAliveCountMax 3

  • Host alias: 接続先サーバーのエイリアス(ニックネーム)を指定します。
  • HostName server_ip_address: 接続先サーバーのIPアドレスまたはホスト名を指定します。
  • User username: 接続に使用するユーザー名を指定します。
  • Port 22: SSHで使用するポート番号を指定します。デフォルトは22です。
  • IdentityFile ~/.ssh/id_rsa: 使用する秘密鍵のパスを指定します。
  • TCPKeepAlive yes: TCP Keep-Aliveパケットを送信し、接続が切断されるのを防ぎます。
  • ServerAliveInterval 60: サーバーに生存確認パケットを送信する間隔を秒単位で指定します。
  • ServerAliveCountMax 3: サーバーから応答がない場合に、接続を切断するまでの試行回数を指定します。

(図6: SSH設定ファイルの編集)

4.3. セキュリティ強化のための設定

以下の設定は、SSHのセキュリティを強化するために推奨されます。

  • Portの変更: デフォルトのポート番号(22)から別のポート番号に変更することで、ポートスキャンによる攻撃を回避できます。/etc/ssh/sshd_configで変更します。
  • パスワード認証の禁止: パスワード認証を無効にし、SSH鍵認証のみを許可することで、ブルートフォース攻撃を防ぎます。/etc/ssh/sshd_configPasswordAuthentication noを設定します。
  • rootログインの禁止: rootユーザーでの直接ログインを禁止することで、セキュリティリスクを軽減します。/etc/ssh/sshd_configPermitRootLogin noを設定します。
  • 不要なプロトコルの無効化: SSHプロトコルバージョン1(SSHv1)は脆弱性があるため、無効化することを推奨します。/etc/ssh/sshd_configProtocol 2を設定します。
  • Fail2banの導入: Fail2banは、不正なログイン試行を検知し、一定期間アクセスを禁止するツールです。導入することで、ブルートフォース攻撃を効果的に防御できます。

5. SSH鍵の管理:安全な保管とバックアップ

SSH鍵は非常に重要な情報です。秘密鍵が漏洩すると、サーバーに不正アクセスされる可能性があります。安全な保管とバックアップを徹底しましょう。

5.1. 秘密鍵の安全な保管

  • アクセス制限: 秘密鍵へのアクセスを自分のみに制限します。
  • パスフレーズの設定: 秘密鍵にパスフレーズを設定することで、万が一秘密鍵が漏洩した場合でも、パスフレーズを知らない第三者は秘密鍵を使用できません。
  • 安全な場所に保管: 秘密鍵を安全な場所に保管します。クラウドストレージやGitリポジトリに保存するのは避けるべきです。
  • ハードウェアセキュリティモジュール (HSM) の利用: より高度なセキュリティが必要な場合は、HSMを利用することを検討してください。HSMは、暗号鍵を安全に保管するための専用ハードウェアです。

5.2. 秘密鍵のバックアップ

  • バックアップの作成: 秘密鍵のバックアップを作成し、安全な場所に保管します。
  • バックアップの暗号化: バックアップを暗号化することで、万が一バックアップが漏洩した場合でも、第三者に内容を読み取られるのを防ぎます。
  • オフライン保管: バックアップをオフラインで保管することで、オンラインからの攻撃を防ぎます。

5.3. 秘密鍵のローテーション

  • 定期的な鍵の交換: 定期的にSSH鍵を交換することで、セキュリティリスクを軽減できます。
  • 鍵の失効: 秘密鍵が漏洩した疑いがある場合は、すぐに鍵を失効させ、新しい鍵を作成します。

6. SSH鍵認証のトラブルシューティング

SSH鍵認証がうまくいかない場合は、以下の点を確認してください。

  • 公開鍵の登録: 公開鍵が正しく~/.ssh/authorized_keysファイルに登録されているか。
  • パーミッション: ~/.sshディレクトリと~/.ssh/authorized_keysファイルのパーミッションが正しく設定されているか。
  • SSH設定ファイル: SSH設定ファイルに誤りがないか。
  • ファイアウォール: ファイアウォールがSSH接続をブロックしていないか。
  • SELinux/AppArmor: SELinuxまたはAppArmorがSSH接続を制限していないか。
  • サーバー側の設定: サーバー側のSSH設定(sshd_config)がSSH鍵認証を許可しているか。

(図7: SSH鍵認証のトラブルシューティング)

7. まとめ

SSH鍵認証は、パスワード認証よりも安全で便利な認証方法です。この記事では、SSH鍵の作成から設定、そして運用までを詳しく解説しました。SSH鍵認証を正しく理解し、適切に設定することで、サーバーのセキュリティを大幅に向上させることができます。ぜひ、SSH鍵認証を活用して、安全なサーバー運用を実現してください。


補足:

  • 上記の記事は、テキストのみで記述されています。図解を挿入することで、より理解しやすくなります。
  • 具体的なコマンド例や設定例は、環境によって異なる場合があります。
  • セキュリティに関する情報は常に変化するため、最新の情報を確認するようにしてください。

このガイドが、SSH鍵認証の理解と設定のお役に立てれば幸いです。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール