SSH キー生成: 初心者のための完全ガイド

SSH(Secure Shell)は、リモートサーバーに安全に接続するための必須ツールです。パスワードを使用するよりもはるかに強力なセキュリティを提供するSSHキーを基にした認証方式は、すべての開発者にとって欠かせない知識です。この記事では、SSHキー生成の基本概念から実際の使い方まで、初心者の視点に合わせてわかりやすく詳しく説明します。


SSH キー生成が必要な理由

従来のパスワード方式は、入力過程での露出リスクがあり、ブルートフォース攻撃に脆弱であるという欠点があります。SSHキーは公開キー(Public Key)と秘密キー(Private Key)という一対のキーを使用して、これらの問題を解決します。

  • 秘密キー (Private Key): ユーザーのコンピュータに安全に保管され、絶対に外部に露出してはいけません。このキーがなければサーバーに接続できません。
  • 公開キー (Public Key): 接続しようとするサーバーに登録するキーです。公開してもセキュリティ上問題ありません。

SSH接続時、サーバーはユーザーの公開キーを利用して認証リクエストを暗号化し、ユーザーコンピュータの秘密キーがこれを成功裏に復号化すると接続が許可される方式です。これにより、パスワードをやり取りすることなく安全に通信できます。

SSHの妖精が公開キーを渡すシーン


SSH キー生成方法: ssh-keygen コマンド

SSHキーを生成する最も基本的なコマンドは ssh-keygen です。ターミナルを開いて次のコマンドを入力してみてください。

ssh-keygen

コマンドを実行するといくつかの質問が出てきます。一つずつ見てみましょう。

  1. Enter file in which to save the key (/home/youruser/.ssh/id_rsa):

    • 生成されるキーのファイル保存場所を尋ねる質問です。特別な理由がない限り、デフォルトの場所である .ssh/id_rsa を使用するのが良いです。単に Enter を押してください。

  2. Enter passphrase (empty for no passphrase):

    • 秘密キーにパスワードを設定するかどうかを尋ねる質問です。 セキュリティ強化のために必ず設定することをお勧めします。 パスワードを設定すれば、秘密キーが漏洩してもパスワードを知らなければ使用できないため、二重のセキュリティが可能です。パスワードを入力すると、ターミナルに何も表示されないので注意して入力し、 Enter を押してください。

  3. Enter same passphrase again:

    • 前に入力したパスワードを再度入力して確認します。
    • 予想結果:

Your identification has been saved in /home/youruser/.ssh/id_rsa
Your public key has been saved in /home/youruser/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx youruser@yourmachine
The key's randomart image is:
+---[RSA 3072]----+
|        .=*o.    |
|       . +.E+    |
|      . o.=. .   |
|       o  . o    |
|      . S  .     |
|       . .       |
|        .        |
|                 |
|                 |
+----[SHA256]-----+

キーの生成が完了すると ~/.ssh/ ディレクトリに2つのファイルが生成されます。

  • id_rsa: 秘密キー (Private Key)
  • id_rsa.pub: 公開キー (Public Key)

RSA と Ed25519: どの方式を選べばいいのか?

SSHキーを生成する際、ssh-keygen コマンドに -t オプションを使ってキーの暗号化方式を指定することができます。主に使われる方式は RSAEd25519です。

1. RSA方式 (-t rsa)

  • SSHの初期から広く使用されている方式です。
  • 安定性が検証されており、大多数のシステムと互換性があります。
  • キーの長さを指定可能で、一般的には 4096ビットの使用が推奨されます。
    • 例: ssh-keygen -t rsa -b 4096

2. Ed25519方式 (-t ed25519)

  • より新しい暗号化方式で、Curve25519楕円曲線暗号化に基づいています。
  • RSAに比べて 短いキー長でも同等またはそれ以上のセキュリティを提供します。
  • キー生成および認証速度が速く、より少ないリソースを使用します。
  • 最新のシステムのほとんどではサポートされていますが、非常に古いシステムでは非互換の可能性があります。
    • 例: ssh-keygen -t ed25519

推奨の方法とその理由

現時点では特別な互換性の問題がない場合、 Ed25519方式の使用を強くお勧めします。

  • より良いセキュリティ: 短いキー長でも強力なセキュリティを提供し、ブルートフォース攻撃などに対してより強固です。
  • より速い性能: キー生成および認証プロセスがより効率的です。
  • 簡潔さ: RSAのようにキーの長さで悩む必要がなく、簡単に生成できます。

Ed25519 キー生成の例

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_my_server -C "my_server_ssh_key"
  • -t ed25519: Ed25519方式でキーを生成します。
  • -f ~/.ssh/id_ed25519_my_server: キーファイルの名前を id_ed25519_my_server に指定します。(既存の id_rsa と区別するために名前を変更できます。)
  • -C "my_server_ssh_key": キーに対するコメント(Comment)を追加します。どの目的で生成されたキーなのか分かりやすく名前を付けることをお勧めします。

予想される結果:

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):  # パスワード入力 (推奨)
Enter same passphrase again:                # パスワード再確認
Your identification has been saved in /home/youruser/.ssh/id_ed25519_my_server
Your public key has been saved in /home/youruser/.ssh/id_ed25519_my_server.pub
The key fingerprint is:
SHA256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy my_server_ssh_key
The key's randomart image is:
+--[ED25519 256]--+
|      .+=+       |
|     . oE B      |
|      o + O      |
|     . + +       |
|    o . S        |
|   . = .         |
|  . B +          |
| . * = o         |
|+ o . = .        |
+----[SHA256]-----+

これで、SSHキーを生成し管理する基本的な方法を理解されたことでしょう。生成された公開キー(id_ed25519_my_server.pubまたは id_rsa.pub)をリモートサーバーの ~/.ssh/authorized_keysファイルに登録すれば、パスワードなしで安全に接続できます。次の記事では生成したSSHキーをサーバーに登録して使う方法について詳しく説明します。

疑問点があれば、いつでもコメントで質問してください!