PuTTYgenとは?SSH鍵ペアの生成方法を徹底解説
はじめに:なぜSSH鍵認証が必要なのか
インターネットを通じてリモートサーバーに接続する際、最も一般的で安全な方法の一つがSSH(Secure Shell)です。SSHは、暗号化された通信路を提供し、機密情報であるログイン認証情報やコマンドのやり取りが第三者に見られることを防ぎます。
SSHの認証方法には、主に以下の二つがあります。
- パスワード認証: ユーザー名とパスワードを使って認証する方法です。最も直感的で分かりやすい方法ですが、パスワードが推測されやすい、ブルートフォース攻撃に弱い、パスワードの使い回しによるリスク増大など、セキュリティ上の懸念が多くあります。
- 公開鍵認証: 事前に生成した「鍵ペア」(公開鍵と秘密鍵)を使って認証する方法です。パスワードを入力する必要がないため、パスワード漏洩のリスクを回避できます。また、パスワード認証よりもはるかに強力なセキュリティを提供します。
現代のセキュリティにおいては、パスワード認証よりも公開鍵認証を使用することが強く推奨されています。特にサーバー管理者にとっては、多数のサーバーへのアクセスを安全に管理するために、公開鍵認証は不可欠な技術です。
この公開鍵認証において中心的な役割を果たすのが「鍵ペア」です。そして、Windows環境でSSHクライアントとして広く使われているPuTTYを使用する場合、この鍵ペアを生成するためのツールが必要になります。それが、この記事で解説する「PuTTYgen」です。
本記事では、PuTTYgenがどのようなツールであるか、なぜ必要なのかを説明し、SSH鍵ペアの生成手順から、生成した鍵を使ってサーバーに安全に接続するまでのプロセスを、詳細かつ分かりやすく解説します。SSH鍵認証の仕組み、PuTTYgenの各設定の意味、そして鍵管理におけるセキュリティのベストプラクティスについても触れ、読者がSSH鍵認証を自信を持って活用できるようになることを目指します。
第1章:SSHと公開鍵認証の基本原理
PuTTYgenについて理解する前に、まずはSSHの公開鍵認証がどのように機能するのか、その基本的な仕組みを理解しておきましょう。
1.1 SSH(Secure Shell)とは
SSHは、ネットワーク上で安全にリモートコンピュータを操作するためのプロトコルです。もともと、telnetやrshといったプロトコルが暗号化されずに通信を行っていたため、通信内容が盗聴される危険がありました。SSHはこれらの問題を解決するために開発され、クライアントとサーバー間のすべての通信を暗号化します。
SSHは主に以下の機能を提供します。
- リモートコマンド実行: サーバー上でコマンドを実行できます。
- セキュアなファイル転送: SCP (Secure Copy Protocol) や SFTP (SSH File Transfer Protocol) を使って、安全にファイルを送受信できます。
- ポートフォワーディング(SSHトンネル): 暗号化された通信路を使って、他のプロトコルの通信を安全に中継できます。
SSH接続を確立する際には、通常、クライアント(操作する側のコンピュータ)がサーバー(操作される側のコンピュータ)に対して認証を行います。この認証方法の一つが公開鍵認証です。
1.2 公開鍵認証の仕組み:鍵ペアの役割
公開鍵認証は、「公開鍵暗号方式」という技術に基づいています。この方式では、「鍵ペア」と呼ばれる二つの異なる鍵を使用します。
- 秘密鍵(Private Key): 文字通り、誰にも知られてはならない秘密の鍵です。これは、鍵ペアの持ち主だけが大切に保管します。秘密鍵は、特定の公開鍵で暗号化されたデータを復号したり、自分が正当な鍵ペアの持ち主であることを証明するための「署名」を作成したりするために使用されます。
- 公開鍵(Public Key): 誰に知られても安全な公開しても良い鍵です。秘密鍵とペアになっており、秘密鍵から生成されますが、公開鍵から秘密鍵を導き出すことは非常に困難(計算論的に不可能)です。公開鍵は、対応する秘密鍵を持つユーザーへのメッセージを暗号化したり、そのユーザーが作成した署名を検証したりするために使用されます。
SSHの公開鍵認証では、この鍵ペアを以下のように利用します。
- 鍵ペアの生成: ユーザーは自分のコンピュータ(クライアント側)で秘密鍵と公開鍵のペアを生成します。PuTTYgenはこの作業を行うツールです。
- 公開鍵の配置: 生成した公開鍵を、接続したいリモートサーバーの特定の場所(通常はユーザーのホームディレクトリの
.ssh
ディレクトリ内にあるauthorized_keys
ファイル)に配置します。 - 接続要求: クライアントは秘密鍵を使って、サーバーにSSH接続を要求します。この際、クライアントは自分が持っている秘密鍵に対応する公開鍵がサーバーに登録されていることを期待します。
- サーバーによる認証:
- サーバーは、接続要求を受け付けたユーザーの公開鍵が
authorized_keys
ファイルに登録されているかを確認します。 - 登録されている場合、サーバーは特定のチャレンジデータを作成し、そのユーザーの公開鍵で暗号化してクライアントに送信します。
- クライアントは、サーバーから受け取った暗号化されたチャレンジデータを、自分が持つ秘密鍵で復号します。
- クライアントは復号したデータをサーバーに送り返します。
- サーバーは、クライアントから送られてきたデータが自分が最初に送ったチャレンジデータと一致するかを確認します。一致すれば、クライアントが確かに対応する秘密鍵を持っていると判断し、認証成功となります。
- サーバーは、接続要求を受け付けたユーザーの公開鍵が
この一連のプロセスにおいて、秘密鍵はクライアントのコンピュータから外に出ることはありません。サーバーは公開鍵を使って認証プロセスを進めるため、秘密鍵がネットワーク上を流れるリスクがありません。これが、公開鍵認証がパスワード認証よりも安全とされる理由です。
1.3 パスワード認証と比較した公開鍵認証のメリット
公開鍵認証を使用することには、多くのメリットがあります。
- 高いセキュリティ: 鍵長が十分に長ければ、秘密鍵を推測したり、公開鍵から秘密鍵を導き出したりすることは現在の計算能力では事実上不可能です。これにより、ブルートフォース攻撃や辞書攻撃による不正ログインのリスクを大幅に軽減できます。
- パスワード漏洩リスクの回避: パスワードを入力する必要がないため、キーロガーによってパスワードが盗まれたり、人がパスワードを覗き見たりするリスクがありません。また、複数のサーバーで同じパスワードを使い回すことによるリスク集中も避けられます。
- 自動化の容易さ: パスフレーズなしの鍵ペアを使用すれば、スクリプトなどからの自動ログインが可能になります(ただし、セキュリティリスクを十分に理解した上で行う必要があります)。
- パスフレーズによる追加のセキュリティ層: 秘密鍵自体に「パスフレーズ」という追加のパスワードを設定することで、秘密鍵ファイルが万が一漏洩しても、パスフレーズを知らない第三者には悪用されないように保護できます。
これらのメリットから、SSH接続においては公開鍵認証を積極的に利用することが推奨されます。
第2章:PuTTYgenとは?その役割と特徴
SSHの公開鍵認証に必要な鍵ペアを生成するツールは、OSによって異なります。LinuxやmacOSなどのUNIX系システムでは、通常ssh-keygen
というコマンドラインツールが標準で提供されています。一方、WindowsでPuTTYのようなSSHクライアントを使用する場合、それに合わせた鍵生成ツールが必要になります。それが「PuTTYgen」です。
2.1 PuTTYgenの概要
PuTTYgenは、PuTTYというSSHクライアントソフトウェアスイートに含まれるツールの一つです。主に以下の目的で使用されます。
- SSH鍵ペアの生成: SSH公開鍵認証で使用する公開鍵と秘密鍵のペアを生成します。
- 鍵フォーマットの変換: 他のSSHクライアント(例: OpenSSH)で生成された鍵をPuTTY独自のフォーマット(
.ppk
ファイル)に変換したり、逆にPuTTYgenで生成した鍵をOpenSSH形式に変換したりできます。 - 既存の秘密鍵のパラメータ表示やパスフレーズの変更: 生成済みの秘密鍵ファイルを読み込み、鍵の種類やフィンガープリントなどの情報を表示したり、設定済みのパスフレーズを変更したりできます。
2.2 なぜPuTTYgenが必要なのか?PuTTYの鍵フォーマット
PuTTYは、標準的なOpenSSH形式の秘密鍵(通常、拡張子なしや.pem
、.key
など)を直接読み込むことができません。PuTTYは独自の秘密鍵フォーマットを使用しており、その拡張子は通常.ppk
(PuTTY Private Key)となります。
したがって、LinuxやmacOSでssh-keygen
コマンドを使って生成した鍵ペアをWindowsのPuTTYで利用したい場合、あるいはその逆の場合、鍵フォーマットの変換が必要になります。PuTTYgenは、このPuTTY独自の.ppk
形式とOpenSSH形式の間で鍵を相互に変換する機能も提供しています。
PuTTYgenは、PuTTY自体と同じく、軽量でインストールが容易な(あるいはインストール不要な実行ファイル形式の)Windows用アプリケーションです。GUIベースで操作できるため、コマンドラインに慣れていないユーザーでも比較的簡単に鍵ペアを生成できます。
第3章:PuTTYgenの入手と起動
PuTTYgenはPuTTYの公式サイトから無料で入手できます。
3.1 PuTTYgenのダウンロード
- PuTTYの公式サイト(
https://www.putty.org/
)にアクセスします。 - ダウンロードページへのリンクを探します(通常、トップページに大きく表示されています)。
- ダウンロードページで、お使いのWindowsのバージョン(32ビット版か64ビット版か)に合ったPuTTYインストーラーまたは実行ファイルを探します。PuTTYgenは通常、PuTTY本体のインストーラーに含まれています。単体で提供されている場合もあります(
puttygen.exe
)。 - インストーラー版をダウンロードした場合、指示に従ってインストールを実行します。PuTTYgenも同時にインストールされます。
- 実行ファイル版(
puttygen.exe
)をダウンロードした場合、インストールは不要です。ダウンロードしたファイルを任意の場所に保存するだけで使用できます。
3.2 PuTTYgenの起動
インストール版の場合:
Windowsのスタートメニューを開き、「PuTTYgen」を探してクリックします。
実行ファイル版の場合:
ダウンロードしたputtygen.exe
ファイルをダブルクリックして実行します。
いずれの場合も、PuTTY Key Generatorのウィンドウが表示されます。これで鍵ペアを生成する準備ができました。
第4章:SSH鍵ペアの生成手順(詳細)
PuTTYgenを起動したら、いよいよSSH鍵ペアを生成する作業に入ります。ここでは、ウィンドウの各項目の意味と、生成から保存までの詳細な手順を解説します。
PuTTY Key Generatorのウィンドウは、いくつかの主要なセクションに分かれています。
- Parameters: 生成する鍵の種類や長さを設定します。
- Actions: 鍵の生成、読み込み、保存などの主要な操作ボタンがあります。
- Key: 生成された公開鍵の情報が表示される領域です。
- Key passphrase / Confirm passphrase: 秘密鍵を保護するためのパスフレーズを設定するフィールドです。
- Key comment: 生成する鍵に任意のコメントを設定できます。
では、具体的な手順を見ていきましょう。
ステップ1:Parametersの設定
PuTTYgenウィンドウの「Parameters」セクションで、生成する鍵の種類と鍵長を選択します。
-
Type of key to generate: 鍵の種類を選択します。一般的には以下の種類があります。
- RSA: 最も広く使われている公開鍵暗号アルゴリズムです。多くのSSHサーバーでサポートされています。
- DSA: Digital Signature Algorithm。現在はRSAよりも使用頻度が低く、推奨されない場合もあります。鍵長が固定(1024ビット)です。
- ECDSA: Elliptic Curve Digital Signature Algorithm。楕円曲線暗号に基づき、RSAやDSAよりも短い鍵長で同等以上のセキュリティ強度が得られるとされています。比較的新しいサーバーやクライアントでサポートされています。
- Ed25519: Edwards-curve Digital Signature Algorithm based on Curve25519. 比較的新しいアルゴリズムで、高速かつ高いセキュリティを持つと評価されています。RSAに代わる選択肢として推奨されることが増えています。
推奨: 特に理由がなければ、最新のPuTTYgenバージョンであれば
Ed25519
またはRSA
を選択するのが良いでしょう。多くの環境での互換性を考慮するならRSA
が最も無難です。Ed25519
は新しいですが、対応していない古いサーバーも存在します。 -
Number of bits in a generated key: 鍵長(ビット数)を設定します。鍵長が長いほどセキュリティは高まりますが、鍵の生成や認証に時間がかかるようになります。
- RSAの場合、最低でも2048ビットが推奨されています。より安全性を高めるためには4096ビットを選択することが多いです。
- DSAは1024ビット固定です。
- ECDSAやEd25519は、RSAに比べて短い鍵長で同等以上のセキュリティが得られます。例えば、Ed25519は256ビットですが、これはRSAの3072ビットと同等かそれ以上の強度を持つとされています。ECDSAの場合は、256, 384, 521ビットなどが選択可能です。
推奨: RSAを選択する場合は4096ビット、Ed25519を選択する場合はデフォルトの256ビットで十分です。
ここでは例として、Type of keyを「RSA」、Number of bitsを「4096」に設定することにします。
ステップ2:鍵の生成実行
Parametersを設定したら、「Actions」セクションにある「Generate」ボタンをクリックします。
クリックすると、ウィンドウの下部に進行状況を示すプログレスバーが表示されます。同時に、マウスカーソルをウィンドウ内の空白領域でランダムに動かすように指示されます。
これは、鍵生成に必要な「ランダム性(エントロピー)」をコンピュータに与えるためです。高品質な鍵を生成するには、予測不能なランダムなデータが必要です。人間のマウス操作はコンピュータにとっては予測しにくいため、これをランダム性の源として利用します。プログレスバーが満タンになるまで、根気強くマウスを動かし続けてください。
ステップ3:生成された鍵の確認
マウス操作によって鍵の生成が完了すると、ウィンドウ上部の「Key」セクションに公開鍵の情報が表示されます。
-
Public key for pasting into OpenSSH authorized_keys file:
ここに表示されているのが、サーバーに配置する公開鍵の内容です。ssh-rsa AAAA...
のような文字列で始まります(鍵の種類によって異なります)。この文字列全体を、サーバーの~/.ssh/authorized_keys
ファイルにコピー&ペーストします。このセクションに表示されている形式は、OpenSSHのauthorized_keys
ファイルにそのまま貼り付けられるように整形されています。 -
Key comment:
鍵に任意のコメントを設定できます。デフォルトでは、鍵生成に使用したアルゴリズム、鍵長、生成日時などが自動的に設定されます。後で複数の鍵を管理する際に、このコメントを見て鍵を識別しやすくするために、例えば「自分のユーザー名@ホスト名」のような分かりやすい情報を追記しておくと良いでしょう。このコメントは、サーバー側のauthorized_keys
ファイルにも公開鍵の行の末尾に付加されて保存されます。 -
Key fingerprint:
鍵の「指紋」です。これは公開鍵をハッシュ化したもので、非常に短くユニークな文字列になります。鍵ペアが正しく生成されたか、あるいはサーバーに配置した公開鍵がローカルで生成したものと一致するかなどを確認する際に使用できます。
ステップ4:秘密鍵のパスフレーズ設定(推奨)
生成された鍵ペアの情報を確認したら、次に秘密鍵のセキュリティを設定します。ウィンドウ中央にある「Key passphrase」と「Confirm passphrase」のフィールドを使用します。
- Key passphrase: 秘密鍵を開く(使用する)際に必要となるパスワード(パスフレーズ)を入力します。
- Confirm passphrase: 確認のため、上記のパスフレーズをもう一度入力します。
パスフレーズを設定することを強く推奨します。 パスフレーズを設定しておけば、秘密鍵ファイルが第三者の手に渡っても、パスフレーズを知らない限りその秘密鍵を使ってSSH接続することはできません。これは、秘密鍵漏洩時の被害を最小限に抑えるための重要なセキュリティ対策です。
パスフレーズは、パスワードと同様に、推測されにくい複雑なもの(大文字・小文字・数字・記号を組み合わせた長い文字列)に設定しましょう。ただし、SSH接続のたびにこのパスフレーズを入力する必要があるため、忘れにくいものにする必要もあります(後述するPageantを使えば、一度入力すれば以降の入力は不要にできます)。
パスフレーズを設定しない(空欄にする)ことも可能ですが、その場合、秘密鍵ファイルそのものが秘密鍵の役割を果たしてしまうため、秘密鍵ファイルが漏洩すると誰でもその鍵を使って接続できてしまいます。自動化などの特別な理由がない限り、パスフレーズは必ず設定しましょう。
ステップ5:秘密鍵の保存
パスフレーズを設定したら、「Actions」セクションにある「Save private key」ボタンをクリックして、秘密鍵をファイルに保存します。
ファイルの保存場所を指定し、ファイル名を付けて保存します。通常、拡張子は.ppk
となります。ファイル名は任意ですが、後で識別しやすいように「id_rsa.ppk」や「mykey_serverA.ppk」のように付けておくと良いでしょう。
PuTTYgenは、パスフレーズを設定していない場合に「パスフレーズなしで秘密鍵を保存しますか?非常に危険です!」といった警告を表示します。パスフレーズを設定していても、RSA鍵などで推奨される古い形式(PPK v2形式)で保存する場合などに追加の警告が表示されることがあります。基本的に最新の形式(PPK v3形式)で保存すれば問題ありません。警告の意味を理解した上で、必要に応じて「はい」を選択して保存を進めてください。
保存した秘密鍵ファイル(.ppk
)は、絶対に他の人に見られたり、安易な場所に置いたりしないでください。 これはあなたのデジタルな「印鑑」のようなものです。USBメモリに入れて持ち運ぶ場合なども、紛失には十分注意し、パスフレーズによる保護を必ず行いましょう。
ステップ6:公開鍵の保存(オプション、だが推奨)
PuTTYgenウィンドウ上部の「Public key for pasting into OpenSSH authorized_keys file:」の領域に表示されている文字列は、サーバーにコピー&ペーストするために表示されているものですが、この公開鍵の内容をファイルとして保存しておくこともできます。これは、後でサーバーにデプロイする際に便利です。
「Actions」セクションにある「Save public key」ボタンをクリックして、公開鍵をファイルに保存します。
保存場所を指定し、ファイル名を付けて保存します。通常、拡張子は.pub
となります。ファイル名は対応する秘密鍵と同じ名前にしておくと管理しやすいため、「id_rsa.pub」や「mykey_serverA.pub」のようにします。
この方法で保存される公開鍵ファイルは、OpenSSHの標準的な形式(一行のテキストファイル)になります。これをそのままサーバーのauthorized_keys
ファイルにコピー&ペーストして使用できます。
補足: 公開鍵は公開しても安全な鍵なので、秘密鍵ほど厳重に管理する必要はありませんが、どの公開鍵がどの秘密鍵とペアであるかを管理するためには、秘密鍵ファイルと同じ場所にペアとして保存しておくのが良いでしょう。
これで、PuTTYgenを使ったSSH鍵ペアの生成作業は完了です。
第5章:生成した鍵の確認と理解
生成した.ppk
ファイル(秘密鍵)と.pub
ファイル(公開鍵)は、それぞれ特定のフォーマットを持っています。これらのファイルの中身を簡単に見て、理解を深めましょう。
5.1 秘密鍵ファイル(.ppk
)
秘密鍵ファイル(例: id_rsa.ppk
)はPuTTY独自のバイナリフォーマットです。テキストエディタで開くと、以下のような内容が表示される場合があります(バージョンによって異なります)。
PuTTY-Key-File-3: rsa
Encryption: aes256-cbc
Comment: rsa-key-20231027
Public-Lines: 6
AAAAB3NzaC1yc2EAAAADAQABAAABAQC5... (公開鍵データが複数行にわたる) ...
Private-Lines: 14
AAAA... (秘密鍵データが複数行にわたる) ...
Private-MAC: ...
これはファイルの一部を人間が読めるように整形したものですが、実際には暗号化されたバイナリデータが含まれています。特にパスフレーズを設定した場合、「Encryption」の行があり、秘密鍵データ部分は指定したパスフレーズで暗号化されています。このファイルの中身を直接編集することは絶対に避けてください。破損したり、使用できなくなったりする可能性があります。秘密鍵の変更(パスフレーズ変更など)は必ずPuTTYgenの機能を使って行います。
5.2 公開鍵ファイル(.pub
)
公開鍵ファイル(例: id_rsa.pub
)は、OpenSSHの標準的な一行形式で保存されます。テキストエディタで開くと、通常以下のような一行が表示されます。
ssh-rsa AAAA... == rsa-key-20231027
または(Ed25519の場合)
ssh-ed25519 AAAA... == rsa-key-20231027
この一行は3つの主要な部分から構成されています。
ssh-rsa
またはssh-ed25519
など: 鍵の種類を示します。AAAA... ==
: 公開鍵本体のデータです。Base64エンコードされています。==
はBase64のパディングです。rsa-key-20231027
: 鍵生成時にPuTTYgenで設定したコメントです。
サーバーのauthorized_keys
ファイルには、この一行をそのままコピー&ペーストします。
第6章:生成した公開鍵をサーバーに配置する
生成した鍵ペアを使ってSSH公開鍵認証を行うには、クライアント側(あなたのPC)に秘密鍵を、サーバー側(接続したいリモートコンピュータ)に公開鍵を配置する必要があります。
サーバーに公開鍵を配置する手順は、主に以下の通りです。
ステップ1:サーバーへの最初の接続
まだそのサーバーに一度もSSH接続したことがない場合は、パスワード認証、あるいは別の既存の鍵ペアを使って、まず一度サーバーにログインする必要があります。
PuTTYを使ってサーバーに接続します。ホスト名(またはIPアドレス)を入力し、ポート番号(デフォルトは22)を確認して「Open」をクリックします。初めて接続する場合、サーバーのホストキーのフィンガープリントが表示され、接続を続行するかどうか確認されます。問題なければ「Accept」または「はい」を選択して続行します。ユーザー名の入力を求められたら入力し、パスワード入力を求められたら入力してログインします。
ステップ2:.ssh
ディレクトリの作成(必要であれば)
ログイン後、公開鍵を保存するためのディレクトリを用意します。通常、これはユーザーのホームディレクトリ直下の.ssh
という隠しディレクトリです。
bash
cd ~
mkdir .ssh
.ssh
ディレクトリが既に存在する場合は、この手順はスキップします。
ステップ3:authorized_keys
ファイルの作成または編集
次に、.ssh
ディレクトリ内にauthorized_keys
という名前のファイルを作成します。このファイルに、ログインを許可したい公開鍵の内容を書き込みます。
- ファイルが存在しない場合:
bash
touch ~/.ssh/authorized_keys - ファイルが存在する場合:
既存のファイルに追記します。
ステップ4:公開鍵の内容をauthorized_keys
ファイルにコピー&ペースト
クライアント側(あなたのPC)でPuTTYgenウィンドウに表示されている公開鍵の内容、またはPuTTYgenで保存した.pub
ファイルの内容をコピーします。
ssh-rsa AAAA... == rsa-key-20231027
(上記の形式の一行全体です)
サーバー側に戻り、テキストエディタ(vi, nanoなど)を使って~/.ssh/authorized_keys
ファイルを開きます。
bash
nano ~/.ssh/authorized_keys
または
bash
vi ~/.ssh/authorized_keys
ファイルの末尾に、コピーした公開鍵の内容を貼り付けます。もし既に他の公開鍵が登録されている場合は、新しい行に追記してください。一つの公開鍵は一行として記述します。
貼り付けたら、ファイルを保存して閉じます。
注意: 公開鍵の内容は、PuTTYgenのウィンドウに表示されている「Public key for pasting into OpenSSH authorized_keys file」セクションからコピーするのが最も確実です。.pub
ファイルをテキストエディタで開いてコピーする場合も、余分な改行やスペースが含まれないように注意してください。
ステップ5:.ssh
ディレクトリとauthorized_keys
ファイルのパーミッション設定
SSHサーバーは、セキュリティ上の理由から、.ssh
ディレクトリとauthorized_keys
ファイルのパーミッション(権限)を厳密にチェックします。パーミッションが正しく設定されていないと、公開鍵認証でのログインが拒否されます。
通常、以下のようなパーミッションを設定する必要があります。
~/.ssh
ディレクトリ: 所有者のみ読み書き実行可能 (rwx)。グループ、その他のユーザーは何もできない。
bash
chmod 700 ~/.ssh~/.ssh/authorized_keys
ファイル: 所有者のみ読み書き可能 (rw-)。グループ、その他のユーザーは何もできない。
bash
chmod 600 ~/.ssh/authorized_keys
これらのパーミッション設定は非常に重要です。多くの場合、公開鍵認証でログインできない原因はパーミッションの問題です。必ず上記のコマンドを実行して、パーミッションを確認してください。
補足: パーミッションを確認するにはls -ld ~/.ssh ~/.ssh/authorized_keys
コマンドを使用します。出力がdrwx------
と-rw-------
になっていれば正しいです。
これで、サーバー側の公開鍵の配置は完了です。一度パスワード認証でログインしたセッションはログアウトして構いません。
第7章:秘密鍵を使ってSSH接続する
クライアント側に秘密鍵があり、サーバー側にそれに対応する公開鍵が正しく配置されたら、いよいよ秘密鍵を使ってSSH接続を試みます。これはPuTTYの設定で行います。
ステップ1:PuTTYの設定を開く
PuTTYを起動します。Sessionウィンドウが表示されます。
ステップ2:接続先ホストとポートを設定
「Session」カテゴリを開き、接続したいサーバーの情報を入力します。
- Host Name (or IP address): サーバーのホスト名またはIPアドレスを入力します。
- Port: SSHポート番号を入力します(デフォルトは22)。
- Connection type: 「SSH」が選択されていることを確認します。
ステップ3:秘密鍵ファイルの指定
左側のカテゴリツリーから「Connection」→「SSH」→「Auth」と展開していきます。
「Authentication parameters」セクションに「Private key file for authentication:」という項目があります。「Browse…」ボタンをクリックします。
ファイル選択ダイアログが表示されるので、PuTTYgenで保存した秘密鍵ファイル(.ppk
ファイル)を選択します。
ステップ4:ユーザー名の自動入力(オプション)
毎回ユーザー名を入力する手間を省きたい場合は、左側のカテゴリツリーで「Connection」→「Data」を選択します。
「Login details」セクションの「Auto-login username」フィールドに、サーバーで利用するユーザー名を入力します。
ステップ5:セッション設定の保存(推奨)
ここまでの設定(ホスト名、ポート、秘密鍵ファイル、ユーザー名など)を毎回行うのは手間なので、セッションとして保存しておくと便利です。
左側のカテゴリツリーで一番上の「Session」を選択します。
「Saved Sessions」の下にあるフィールドに、この設定に分かりやすい名前(例: MyServer_KeyAuth
, serverA_userB
など)を入力し、「Save」ボタンをクリックします。次回以降は、保存したセッションを選択して「Load」ボタンをクリックするだけで、全ての設定が読み込まれます。
ステップ6:SSH接続の実行
設定が完了したら、PuTTY Sessionウィンドウに戻り(保存した場合は一度Loadしてから)、画面下部の「Open」ボタンをクリックします。
設定が正しければ、以下のような挙動になります。
- PuTTYがサーバーへの接続を開始します。
- 秘密鍵にパスフレーズを設定している場合、パスフレーズの入力を求めるプロンプトが表示されます。「Enter passphrase for key “comment_string”:」のようなメッセージが表示されるので、設定したパスフレーズを入力してEnterキーを押します。
- パスフレーズが正しく、サーバーに適切な公開鍵が登録されていれば、認証に成功し、サーバーのシェルプロンプトが表示されます。
パスワードの入力を求められず、パスフレーズの入力だけでログインできた場合、公開鍵認証は成功しています。
Pageant(SSH Agent)の活用
SSH接続のたびに秘密鍵のパスフレーズを入力するのは、特に頻繁に接続する場合や複数のサーバーに接続する場合に面倒です。これを解決するのが、PuTTYスイートに含まれる「Pageant」(パージェント、またはペイジェント)というツールです。
PageantはSSHエージェントとして機能し、秘密鍵をメモリ上にロードして管理してくれます。一度秘密鍵とパスフレーズをPageantに登録すれば、Pageantが実行されている間は、秘密鍵が必要になるSSH接続時にパスフレーズの入力を求められることなく自動的に認証が行われます。
Pageantの使い方は以下の通りです。
- Pageantを起動します。通常、
pageant.exe
という名前でPuTTYと一緒にインストールされています。起動すると、タスクトレイにアイコンが表示されます。 - タスクトレイのPageantアイコンを右クリックし、「View Keys」を選択します。
- Pageant Key Listウィンドウが表示されるので、「Add Key」ボタンをクリックします。
- 秘密鍵ファイル(
.ppk
ファイル)を選択します。 - 秘密鍵にパスフレーズが設定されている場合、パスフレーズの入力を求められます。パスフレーズを入力すると、鍵がPageantにロードされます。
- これで、Pageantが実行されている間は、PuTTYからその秘密鍵を使用する接続を行う際にパスフレーズの入力が不要になります。
PageantはWindows起動時に自動実行するように設定することも可能です。これにより、朝一度パスフレーズを入力するだけで、その日一日パスフレーズなしでSSH接続できるようになります。ただし、Pageantが実行されているコンピュータから離れる際は、画面ロックやシャットダウンを行うなど、物理的なセキュリティに十分配慮してください。
第8章:PuTTYgenの高度な機能と注意点
PuTTYgenは鍵の生成だけでなく、既存の鍵を操作するための機能も持っています。
8.1 既存の秘密鍵の読み込み
PuTTYgenで生成した、または他のツールで生成して変換した秘密鍵(.ppk
ファイル)をPuTTYgenで読み込むことができます。
- PuTTYgenを起動します。
- 「Actions」セクションの「Load」ボタンをクリックします。
.ppk
ファイルを選択します。パスフレーズが設定されている場合は、パスフレーズの入力を求められます。- 鍵が正常に読み込まれると、鍵の種類、鍵長、コメント、フィンガープリントなどが表示されます。また、公開鍵の内容も表示されます。
この機能を使って、秘密鍵の情報を確認したり、後述するパスフレーズの変更やフォーマット変換を行ったりします。
8.2 OpenSSH形式への秘密鍵のエクスポート
PuTTYgenで生成した秘密鍵はデフォルトで.ppk
形式ですが、これをOpenSSH形式に変換して保存することができます。これは、生成した鍵をLinuxやmacOSなどの他の環境で利用したい場合に便利です。
- PuTTYgenで秘密鍵を読み込みます(パスフレーズが必要な場合は入力します)。
- メニューバーの「Conversions」を選択します。
- 「Export OpenSSH key」を選択します。パスフレーズが設定されていない場合は「Export OpenSSH key (force new passphrase)」を選択し、新しいパスフレーズを設定することもできます。
- 保存場所とファイル名を指定して保存します。拡張子は通常指定しません(
.pem
などを付けることもあります)。ファイル名は「id_rsa」のようにします。
この方法でエクスポートされた秘密鍵ファイルは、-----BEGIN OPENSSH PRIVATE KEY-----
や-----BEGIN RSA PRIVATE KEY-----
のようなヘッダーで始まるテキストファイルになります。
8.3 他の形式からPuTTY形式への秘密鍵のインポート
OpenSSHのssh-keygen
などで生成した秘密鍵(通常、拡張子なしや.pem
ファイル)をPuTTYで利用するために、PuTTYgenを使って.ppk
形式に変換することができます。
- PuTTYgenを起動します。
- 「Actions」セクションの「Load」ボタンではなく、メニューバーの「Conversions」を選択します。
- 「Import key」を選択します。
- OpenSSH形式の秘密鍵ファイルを選択します。秘密鍵にパスフレーズが設定されている場合は、パスフレーズの入力を求められます。
- インポートが成功すると、鍵の情報が表示されます。
- 「Save private key」ボタンをクリックして、PuTTY形式(
.ppk
)で保存します。パスフレーズを設定/変更することも可能です。
8.4 秘密鍵のパスフレーズの変更
既存の秘密鍵ファイルのパスフレーズを変更したい場合も、PuTTYgenを使用します。
- PuTTYgenで秘密鍵を読み込みます(現在のパスフレーズが必要です)。
- 「Key passphrase」と「Confirm passphrase」のフィールドに、新しいパスフレーズを入力します。
- 「Save private key」ボタンをクリックして、上書き保存または新しいファイル名で保存します。
8.5 鍵のパラメータ表示
秘密鍵ファイルを読み込むことで、その鍵の種類、鍵長、コメント、フィンガープリントなどを簡単に確認できます。これは、複数の鍵を持っている場合に、どの鍵がどれであるかを確認したり、サーバーに登録されている公開鍵のフィンガープリントと比較したりする際に便利です。
8.6 コマンドライン版PuTTYgen
PuTTYgenにはGUI版の他に、コマンドライン版(puttygen.exe
としても提供されることが多い)も存在します。コマンドライン版を使えば、スクリプトなどから鍵の生成や変換を自動化することが可能です。
コマンドライン版の基本的な使い方は以下のようになります。
- 鍵の生成:
puttygen key_type -b bits -o output_key.ppk
例:puttygen -t rsa -b 4096 -o mykey.ppk
(RSA 4096ビットの鍵を生成) - パスフレーズ付きで生成:
puttygen key_type -b bits -P passphrase -o output_key.ppk
- OpenSSH形式で公開鍵を生成:
puttygen private_key.ppk -O public -o public_key.pub
- OpenSSH形式で秘密鍵をエクスポート:
puttygen private_key.ppk -O private -o private_key.pem
- OpenSSH形式からインポートしてPPKで保存:
puttygen private_key.pem -O private -o output_key.ppk
コマンドラインオプションの詳細は、puttygen -h
を実行するか、PuTTYのドキュメントを参照してください。
第9章:鍵管理とセキュリティのベストプラクティス
SSH公開鍵認証は強力なセキュリティを提供しますが、それは秘密鍵が安全に管理されていることが前提です。鍵の管理に関するセキュリティのベストプラクティスをいくつかご紹介します。
9.1 秘密鍵は厳重に保護する
秘密鍵ファイルは、あなたのデジタルな身分証明書かつ印鑑です。これが第三者の手に渡ると、あなたがアクセスできるすべてのサーバーに不正にログインされる可能性があります。
- 秘密鍵を安易に共有しない: 秘密鍵は決して他の人と共有してはいけません。各ユーザーは自分自身の鍵ペアを持つべきです。
- 秘密鍵を安全な場所に保管する: 秘密鍵ファイルは、暗号化されたドライブや、アクセス制御が厳重なディレクトリに保管しましょう。クラウドストレージに保存する場合は、そのストレージ自体のセキュリティ設定に十分注意が必要です。
- 可能な限りパスフレーズを設定する: パスフレーズを設定することで、秘密鍵ファイルが漏洩しても、パスフレーズを知らない限りは安全が保たれます。パスフレーズは長く複雑なものを設定しましょう。
- 秘密鍵を置くコンピュータ自体のセキュリティ: 秘密鍵を保存しているコンピュータは、オペレーティングシステムのセキュリティパッチを適用し、マルウェア対策ソフトウェアを導入するなど、物理的・論理的なセキュリティ対策をしっかりと行いましょう。
9.2 パスフレーズの重要性
パスフレーズは秘密鍵に対する追加のセキュリティ層です。特に、秘密鍵をラップトップなど持ち運び可能なデバイスに保存する場合、デバイスの紛失や盗難に備えてパスフレーズによる保護は不可欠です。パスフレーズは、推測が難しい、しかし自分が忘れにくいものを選びましょう。英数字記号を組み合わせ、十分な長さ(例えば15文字以上)を持たせることが推奨されます。
9.3 Pageantを安全に利用する
Pageantは非常に便利なツールですが、Pageantが実行されている間は、ロードされた秘密鍵はパスフレーズなしで使用できる状態になります。
- コンピュータから離れる際は、必ず画面ロックを行うか、Pageantを終了させましょう。
- 不特定多数の人が利用する公共のコンピュータではPageantを使用しないようにしましょう。
- 信頼できないプログラムを実行する可能性があるコンピュータでは、Pageantの使用に注意が必要です。
9.4 鍵の定期的な更新(ローテーション)
長期にわたって同じ鍵ペアを使用し続けるのではなく、定期的に新しい鍵ペアを生成し、サーバー側の公開鍵を更新することを検討しましょう。鍵の漏洩リスクが蓄積される可能性を減らし、将来的な暗号技術の進歩による鍵の弱体化に備えることができます。鍵の更新頻度は組織のセキュリティポリシーやリスク評価によって異なりますが、例えば1年ごとなどが考えられます。
9.5 鍵が漏洩した場合の対応
もし秘密鍵が漏洩した可能性がある場合、直ちに以下の対応を行う必要があります。
- 新しい鍵ペアを生成する: PuTTYgenで新しい鍵ペアを生成します。
- サーバー上の公開鍵を削除する: 漏洩した秘密鍵に対応する公開鍵を、アクセスしていたすべてのサーバーの
~/.ssh/authorized_keys
ファイルから削除します。これにより、漏洩した秘密鍵を使ってもログインできなくなります。 - 他の認証方法を一時的に無効にする: 鍵の差し替え作業中は、パスワード認証など他の認証方法も一時的に無効にすることを検討し、不正アクセスを防ぎます。
- 関連システムへの影響を確認する: その鍵が使われていたシステムやサービス(SCP/SFTPによるファイル転送、自動化スクリプトなど)への影響を確認し、新しい鍵で設定を更新します。
- 関係者への通知: 鍵の漏洩が確認された場合、関係者や組織のセキュリティ担当者に速やかに報告します。
9.6 サーバー側の.ssh
ディレクトリとauthorized_keys
ファイルのパーミッション再確認
鍵をデプロイした後、あるいは何らかの理由でログインできなくなった場合、最もよくある原因の一つがサーバー側の.ssh
ディレクトリやauthorized_keys
ファイルのパーミッション設定ミスです。定期的に、あるいはトラブル発生時に、これらのパーミッションが700
と600
になっていることを確認しましょう。
第10章:よくある質問(FAQ)
PuTTYgenを使った鍵生成やSSH公開鍵認証に関して、よくある質問とその回答をまとめました。
Q1: 生成した鍵を使ってもサーバーにログインできません。どうすれば良いですか?
A1: ログインできない原因はいくつか考えられます。以下の点を順に確認してください。
1. サーバー側の公開鍵:
* 生成した公開鍵の内容が、サーバーの~/.ssh/authorized_keys
ファイルに正確にコピー&ペーストされているか確認してください。余分なスペース、改行、文字化けがないか注意深く確認します。
* authorized_keys
ファイルは、そのユーザーのホームディレクトリ直下の.ssh
ディレクトリ内に、正確にその名前で配置されているか確認します。
2. サーバー側のパーミッション:
* ~/.ssh
ディレクトリのパーミッションが700
になっているか確認します (chmod 700 ~/.ssh
)。
* ~/.ssh/authorized_keys
ファイルのパーミッションが600
になっているか確認します (chmod 600 ~/.ssh/authorized_keys
)。
* ユーザーのホームディレクトリ自体のパーミッションも確認します(通常は755
や750
など)。所有者以外の書き込み権限があると認証に失敗する場合があります。
3. クライアント側の秘密鍵:
* PuTTYの設定で、正しい.ppk
ファイルが指定されているか確認します。
* 秘密鍵にパスフレーズを設定した場合、接続時に正しいパスフレーズを入力しているか確認します。Cap Lockがかかっていないかなども確認しましょう。
* 秘密鍵ファイルが破損していないか確認します(PuTTYgenで読み込めるか試すなど)。
4. サーバー側のSSHデーモン設定:
* サーバーのSSHデーモン(sshd)の設定ファイル(例: /etc/ssh/sshd_config
)で、公開鍵認証が有効になっているか確認します (PubkeyAuthentication yes
)。
* AuthorizedKeysFile
の設定が正しいパス(デフォルトは.ssh/authorized_keys
)になっているか確認します。
* 設定を変更した場合は、sshdを再起動します(例: systemctl restart sshd
や service sshd restart
)。
5. デバッグ情報の確認: PuTTYで接続を試みる際、「Connection」→「SSH」→「Auth」カテゴリにある「Allow agent forwarding」や「Attempt authentication only using Pageant and challenge-response」などのオプションを確認したり、「Connection」→「SSH」カテゴリにある「Enable Compression」などを一時的に無効にしてみたりします。PuTTYイベントログ(PuTTYウィンドウの右クリックメニューから「Event Log」)や、サーバー側のSSHログ(例: /var/log/auth.log
や/var/log/secure
)を確認すると、認証失敗の原因に関する詳細な情報が得られることがあります。
Q2: 1つの鍵ペアを複数のサーバーで使い回しても良いですか?
A2: 技術的には可能です。一つの秘密鍵と公開鍵のペアを生成し、その公開鍵を複数のサーバーに配置することで、同じ秘密鍵を使ってそれらのサーバー全てにログインできます。これは管理を簡素化できるというメリットがあります。
しかし、セキュリティの観点からはリスクがあります。もしその秘密鍵が漏洩した場合、アクセス権限を持つ全てのサーバーが危険に晒されることになります。個々のサーバーに対して異なる鍵ペアを使用する方が、リスクを分散できるため、セキュリティレベルは高まります。どの程度リスクを許容するかによって判断が分かれるでしょう。重要なサーバーには専用の鍵ペアを使用し、それほど機密性の高くないテスト環境などでは使い回しを検討するなど、リスクに応じて使い分けるのが現実的かもしれません。
Q3: ssh-keygen
で生成した鍵をPuTTYで使いたいのですが?
A3: ssh-keygen
で生成した秘密鍵はOpenSSH形式なので、そのままではPuTTYで使用できません。PuTTYgenを使って、OpenSSH形式の秘密鍵をPuTTY独自の.ppk
形式に変換する必要があります。第8章の「他の形式からPuTTY形式への秘密鍵のインポート」の手順を参照してください。
Q4: PuTTYgenが鍵生成中にマウスを動かすように要求するのはなぜですか?
A4: 鍵ペアの生成には、予測不可能な「ランダム性(エントロピー)」が必要です。特に暗号化の分野では、高品質なランダム性は鍵の安全性を確保するために非常に重要です。コンピュータは本来、非常に規則的な処理を得意とするため、真にランダムなデータを生成するのが苦手です。PuTTYgenは、ユーザーのマウスカーソルの動きという予測しにくい外部からの入力を利用して、鍵生成のためのランダム性を補っています。マウスを動かすことで、より強力で推測されにくい鍵を生成できる可能性が高まります。
Q5: RSA, DSA, ECDSA, Ed25519など、どの鍵タイプを選ぶべきですか?鍵長は?
A5:
* RSA: 最も広く互換性があります。鍵長は2048ビット以上(推奨は4096ビット)を選びましょう。
* DSA: 現在は推奨されません(鍵長が1024ビット固定であり、それ以上の鍵長が標準的に使用されるRSAやECCに比べて強度が低いとされるため)。
* ECDSA: RSAより短い鍵長で同等以上の強度を持ちますが、古いシステムではサポートされていないことがあります。256ビット、384ビット、521ビットが一般的です。
* Ed25519: 比較的新しいアルゴリズムで、高速かつ安全性が高いと評価されています。新しいシステムでサポートされていれば良い選択肢です。鍵長は256ビットで十分な強度があるとされています。
一般的には、互換性を最優先するならRSA 4096ビット、新しいサーバーで性能と強度を重視するならEd25519を選ぶのが良いでしょう。接続先のサーバーがどの鍵タイプをサポートしているか確認することも重要です。
結論:SSH鍵認証とPuTTYgenを活用して安全なリモート接続を
SSH公開鍵認証は、パスワード認証に比べてはるかに高いセキュリティを提供し、現代のリモートサーバー接続においては標準的な認証方法となっています。Windows環境でPuTTYを利用する場合、PuTTYgenはSSH鍵ペアを生成し、管理するために不可欠なツールです。
本記事では、SSH公開鍵認証の基本的な仕組みから、PuTTYgenを使った鍵ペアの具体的な生成手順、生成した公開鍵をサーバーに配置する方法、そしてクライアント側で秘密鍵を使って接続するまでのプロセスを詳細に解説しました。また、PuTTYgenの高度な機能や、鍵管理におけるセキュリティのベストプラクティス、よくある質問にも触れました。
SSH鍵認証を導入することで、パスワード推測や盗聴のリスクを大幅に低減し、より安全で快適なリモート操作環境を構築できます。PuTTYgenはそのための強力な味方となるでしょう。生成した秘密鍵はご自身の財産として大切に管理し、パスフレーズの設定やPageantの活用など、セキュリティ上の注意点を守りながら安全にSSH接続を行ってください。
これで、PuTTYgenとSSH公開鍵認証に関する理解が深まり、自信を持って安全なリモート接続環境を構築・利用できるようになることを願っています。