# SSH キー生成: 初心者のための完全ガイド SSH(Secure Shell)は、リモートサーバーに安全に接続するための必須ツールです。パスワードを使用するよりもはるかに強力なセキュリティを提供するSSHキーを基にした認証方式は、すべての開発者にとって欠かせない知識です。この記事では、SSHキー生成の基本概念から実際の使い方まで、初心者の視点に合わせてわかりやすく詳しく説明します。 --- ## SSH キー生成が必要な理由 {#sec-050e9b336c1f} 従来のパスワード方式は、入力過程での露出リスクがあり、ブルートフォース攻撃に脆弱であるという欠点があります。SSHキーは公開キー(Public Key)と秘密キー(Private Key)という一対のキーを使用して、これらの問題を解決します。 * **秘密キー (Private Key):** ユーザーのコンピュータに安全に保管され、絶対に外部に露出してはいけません。このキーがなければサーバーに接続できません。 * **公開キー (Public Key):** 接続しようとするサーバーに登録するキーです。公開してもセキュリティ上問題ありません。 SSH接続時、サーバーはユーザーの公開キーを利用して認証リクエストを暗号化し、ユーザーコンピュータの秘密キーがこれを成功裏に復号化すると接続が許可される方式です。これにより、パスワードをやり取りすることなく安全に通信できます。 ![SSHの妖精が公開キーを渡すシーン](/media/whitedec/blog_img/ssh_fairy_pubkey.webp) --- ## SSH キー生成方法: `ssh-keygen` コマンド {#sec-3389534de6bd} --- 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:`** * 前に入力したパスワードを再度入力して確認します。 * **予想結果:** ```bash 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: どの方式を選べばいいのか? {#sec-c7f2406d30c3} --- SSHキーを生成する際、`ssh-keygen` コマンドに `-t` オプションを使ってキーの暗号化方式を指定することができます。主に使われる方式は **RSA**と **Ed25519**です。 ### 1. RSA方式 (`-t rsa`) {#sec-ec6e20bec14d} * SSHの初期から広く使用されている方式です。 * 安定性が検証されており、大多数のシステムと互換性があります。 * キーの長さを指定可能で、一般的には `4096`ビットの使用が推奨されます。 + **例:** `ssh-keygen -t rsa -b 4096` ### 2. Ed25519方式 (`-t ed25519`) {#sec-9cf6f651414d} * より新しい暗号化方式で、Curve25519楕円曲線暗号化に基づいています。 * RSAに比べて **短いキー長でも同等またはそれ以上のセキュリティを提供**します。 * キー生成および認証速度が速く、より少ないリソースを使用します。 * 最新のシステムのほとんどではサポートされていますが、非常に古いシステムでは非互換の可能性があります。 + **例:** `ssh-keygen -t ed25519` --- ## 推奨の方法とその理由 {#sec-34493890c52c} 現時点では特別な互換性の問題がない場合、 **Ed25519方式の使用を強くお勧めします。** * **より良いセキュリティ:** 短いキー長でも強力なセキュリティを提供し、ブルートフォース攻撃などに対してより強固です。 * **より速い性能:** キー生成および認証プロセスがより効率的です。 * **簡潔さ:** RSAのようにキーの長さで悩む必要がなく、簡単に生成できます。 --- ## Ed25519 キー生成の例 {#sec-da0db1b49dc1} ``` 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)を追加します。どの目的で生成されたキーなのか分かりやすく名前を付けることをお勧めします。 **予想される結果:** ```bash 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キーをサーバーに登録して使う方法について詳しく説明します。 疑問点があれば、いつでもコメントで質問してください!