【図解】SSH鍵の作り方と設定方法|初心者向け完全ガイド
SSH(Secure Shell)は、ネットワーク経由で安全にコンピュータにアクセスするためのプロトコルです。パスワード認証よりも安全なSSH鍵認証を利用することで、セキュリティを大幅に向上させることができます。この記事では、SSH鍵の作成から設定、そして運用までを初心者にもわかりやすく解説します。図解を交えながら、各ステップを丁寧に説明するので、安心して読み進めてください。
1. SSH鍵認証とは?パスワード認証との違い
SSH鍵認証は、公開鍵暗号方式を利用した認証方法です。秘密鍵と公開鍵のペアを作成し、サーバーに公開鍵を登録することで、クライアントは秘密鍵を使ってサーバーに安全に接続できます。
1.1. パスワード認証の仕組みとリスク
パスワード認証では、サーバーに接続する際にユーザー名とパスワードを入力します。これは最も基本的な認証方法ですが、以下のようなリスクがあります。
- ブルートフォース攻撃: 攻撃者が総当たりでパスワードを試すことで、不正アクセスを試みる。
- 辞書攻撃: 一般的な単語やフレーズを含む辞書を使ってパスワードを推測する。
- パスワードの使い回し: 複数のサービスで同じパスワードを使用している場合、一つのサービスが侵害されると他のサービスも危険にさらされる。
- 中間者攻撃: 通信経路を傍受し、パスワードを盗む。
1.2. SSH鍵認証の仕組みとメリット
SSH鍵認証では、以下の手順で認証が行われます。
- 鍵ペアの生成: クライアント側で秘密鍵と公開鍵のペアを生成する。
- 公開鍵の登録: 公開鍵をサーバーの
~/.ssh/authorized_keys
ファイルに登録する。 - 接続: クライアントがサーバーに接続を試みる。
- チャレンジ: サーバーはクライアントにチャレンジを送信する。
- 署名: クライアントは秘密鍵を使ってチャレンジに署名し、サーバーに送信する。
- 認証: サーバーは公開鍵を使って署名を検証し、認証に成功すれば接続を許可する。
SSH鍵認証のメリットは以下の通りです。
- セキュリティの向上: パスワードをネットワーク経由で送信しないため、傍受される心配がない。また、ブルートフォース攻撃や辞書攻撃にも強い。
- 利便性の向上: パスワードを入力する手間が省ける。
- 自動化: スクリプトや自動化ツールで安全にサーバーにアクセスできる。
(図1: パスワード認証とSSH鍵認証の比較図)
2. SSH鍵の作成
SSH鍵を作成する手順は、使用するOSによって異なりますが、基本的な流れは同じです。ここでは、Linux/macOSとWindowsでの作成方法を解説します。
2.1. Linux/macOSでのSSH鍵作成
Linux/macOSでは、ターミナルを使用してSSH鍵を作成します。
- ターミナルの起動: ターミナルを開きます。
-
ssh-keygenコマンドの実行: 以下のコマンドを実行します。
bash
ssh-keygen -t rsa -b 4096 -C "[email protected]"-t rsa
: 鍵の種類をRSAに指定します。RSAは一般的で安全な鍵の種類です。-b 4096
: 鍵のビット数を4096に指定します。ビット数が大きいほどセキュリティが高くなります。-C "[email protected]"
: コメントとしてメールアドレスを指定します。これは必須ではありませんが、鍵の識別に使用できます。
-
保存場所の指定: 鍵の保存場所を聞かれるので、デフォルトの
~/.ssh/id_rsa
でEnterキーを押すのが一般的です。別の場所に保存したい場合は、パスを入力します。 -
パスフレーズの設定: パスフレーズの設定を求められます。パスフレーズは、秘密鍵を保護するためのパスワードです。設定しておくと、秘密鍵が漏洩した場合でも、パスフレーズを知らない第三者は秘密鍵を使用できません。安全性を高めるために、強力なパスフレーズを設定することを推奨します。パスフレーズを設定しない場合は、Enterキーを2回押します。
(図2: ssh-keygenコマンドの実行画面)
-
鍵の確認: 以下のコマンドで、秘密鍵(
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を使用した方法を解説します。
- PowerShellの起動: PowerShellを管理者として起動します。
-
ssh-keygenコマンドの実行: 以下のコマンドを実行します。
powershell
ssh-keygen -t rsa -b 4096 -C "[email protected]"パラメータの意味はLinux/macOSの場合と同じです。
-
保存場所の指定: 鍵の保存場所を聞かれるので、デフォルトの
C:\Users\username\.ssh\id_rsa
でEnterキーを押すのが一般的です。別の場所に保存したい場合は、パスを入力します。 - パスフレーズの設定: パスフレーズの設定を求められます。Linux/macOSの場合と同様に、強力なパスフレーズを設定することを推奨します。
-
鍵の確認: 以下のコマンドで、秘密鍵(
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. サーバーへの公開鍵の登録
サーバーにログインし、以下の手順で公開鍵を登録します。
-
~/.sshディレクトリの作成: サーバーに
.ssh
ディレクトリが存在しない場合は、作成します。bash
mkdir -p ~/.ssh -
authorized_keysファイルの作成または編集:
~/.ssh/authorized_keys
ファイルを作成または編集します。-
ファイルが存在しない場合は、新規作成します。
bash
touch ~/.ssh/authorized_keys -
ファイルが存在する場合は、追記モードで開きます。
-
-
公開鍵の貼り付け: コピーした公開鍵の内容を
~/.ssh/authorized_keys
ファイルに貼り付けます。-
cat
コマンドとリダイレクトを使用する方法:bash
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys -
テキストエディタを使用する方法:
bash
vi ~/.ssh/authorized_keysvi
エディタでi
キーを押して挿入モードにし、公開鍵を貼り付けます。その後、Esc
キーを押してコマンドモードに戻り、:wq
と入力して保存して閉じます。
-
-
パーミッションの設定:
~/.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_config
でPasswordAuthentication no
を設定します。 - rootログインの禁止: rootユーザーでの直接ログインを禁止することで、セキュリティリスクを軽減します。
/etc/ssh/sshd_config
でPermitRootLogin no
を設定します。 - 不要なプロトコルの無効化: SSHプロトコルバージョン1(SSHv1)は脆弱性があるため、無効化することを推奨します。
/etc/ssh/sshd_config
でProtocol 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鍵認証の理解と設定のお役に立てれば幸いです。