rascal-pendular, bear-den, and no entry

前へ | 目次 | 索引 | 次へ

Chapter 9: Pageant を認証に使用する

Pageant は SSH の 認証エージェントです。 秘密鍵を復号した状態でメモリに保持するので、パスフレーズを入力せずに何度も使えます。

9.1 Pageant を使うには

Pageant を実行する前に秘密鍵を *.PPK 形式で用意します。生成と使用方法は chapter 8 を参照してください。

Pageant を実行するとシステムトレイに帽子を被ったコンピュータのアイコンが表示されます。そして秘密鍵を読み込むまではただそこにあるだけで何もしません。 (おそらく Windows の“隠れてるインジケーターを表示”矢印アイコンを使わないと Pageant アイコンが見えません。)

Pageant のアイコンを右クリックするとメニューを表示します。 “鍵の一覧 / View Keys”を選ぶとメインウインドウが表示されます。 (アイコンをダブルクリックしても表示できます。)

Pageant のウインドウはリストボックスがあります。ここに Pageant が保持している秘密鍵が表示されます。 Pageant を起動したときは何も秘密鍵がないので一覧は空です。鍵を追加すると表示されます。

鍵を Pageant に追加するには“鍵の追加 / Add Key”ボタンを押します。 “秘密鍵ファイルの選択 / Select Private Key File”ファイルダイアログが表示されるので秘密鍵を選んで“開く”を押します。

これで Pageant が秘密鍵を読み込みました。もし鍵がパスフレーズで保護されている場合、Pageant はパスフレーズを入力するように求めてきます。 ([Custom] 過去にパスワードの記憶機能がありましたが現在は利用できません。理由については question A.2.8 を参照してください。) 鍵が読み込まれると Pageant ウインドウ内の一覧に表示されます。

これで PuTTY を起動して鍵を受け取るサイトに SSH セッションを接続すると、PuTTY は Pageant が起動していると気づき、Pageant から鍵を取得して認証に使用します。

([Custom] 確認ダイアログが表示されるかもしれません。Section 9.6.1 を参照してください。)

もうパスフレーズを入力せずに好きなだけ PuTTY のセッションを接続できるようになりました。

(PuTTY は Pageant を使わないように設定できます。詳細は section 4.23.4section 3.11.3.9 を参照してください。)

訳注: 追加した鍵の数だけ認証を試みます。そのため多数の鍵を追加すると、サーバ側で認証試行回数などの制限に当たり認証失敗となる場合があります。これを回避するには、使用したい鍵と同じ公開鍵か秘密鍵を、Pageant 使用時にも設定するか (section 4.24.1)、または接続時にコマンドラインオプション (section 3.11.3.18) で指定します。

Pageant を終了したいときはシステムトレイの Pageant アイコンを右クリックして、メニューから“終了 / Exit”を選びます。 Pageant のメインウインドウを閉じても Pageant は終了しません。

もし Pageant を起動したままで、追加した鍵をすべて取り除きたいときは、システムトレイアイコンのメニューから“すべての鍵を削除 / Remove All Keys”を選びます。

9.2 Pageant のメインウインドウ

Pageant のメインウインドウは Pageant のシステムトレイアイコンをダブルクリックするか、右クリックしてメニューから“鍵の一覧 / View Keys”を選ぶと表示されます。 Pagaent に読み込んだ鍵を確認でき、新しく追加したり既存の鍵を取り除いたりできます。

9.2.1 鍵の一覧

メインウインドウの大きなリストボックスに Pageant に読み込まれた秘密鍵の一覧が表示されます。一覧はこのように表示されます:

Ed25519    SHA256:TddlQk20DVs4LRcAsIfDN9pInKpY06D+h4kSHwWAj4w
RSA  2048  SHA256:8DFtyHm3kQihgy52nzX96qMcEVOq7/yJmmwQQhBWYFg

それぞれの鍵について、リストボックスが表示するのは:

9.2.2 “鍵の追加 / Add Key” ボタン

Pageant にローカルファイルから鍵を読み込むにはメインウインドウの“鍵の追加 / Add Key”ボタンを押すか、システムトレイの Pageant アイコンを右クリックし、メニューから“鍵の追加 / Add Key”を選びます。

Pageant は“秘密鍵ファイルの選択 / Select Private Key File”というファイルダイアログを表示します。秘密鍵のファイルを探して“開く / Open”を押します。複数の鍵を一度に追加したいならば、Shift-クリック (隣接する項目を選択) か Ctrl-クリック (個別の項目を選択) します。

これで Pageant は秘密鍵を読み込みます。鍵がパスフレーズで保護されている場合、Pageant はパスフレーズを入力するよう求めます。

(これだけが Pageant に秘密鍵を追加する方法ではありません。エージェント転送を使ってリモートシステムからも追加できます。詳細は section 9.4 を参照してください。)

9.2.3 “鍵の削除 / Remove Key”ボタン

Pageant から鍵を取り除きたいときは、鍵を一覧から選んで“鍵の削除 / Remove Key”ボタンを押します。 Pageant はメモリ上の鍵を削除します。

“鍵の追加 / Add Key”で追加した鍵と、リモートからエージェント転送で追加した鍵 (section 9.4 参照) の両方で使用できます。この二つに違いはありません。

9.3 Pageant コマンドライン

Pageant はコマンドラインを指定して起動時に処理を自動化できます。 Windows の GUI から Pageant を起動する場合、Windows ショートカットのプロパティを編集して指定できます。

Pageant がすでに動作中の場合、オプションを指定してもう一度起動すると新しい Pageant は起動せず、動作中の Pageant が処理を行います。

訳注: 長い名前のコマンドラインオプションは、これまで -long_name あるいは -long-name という形式でしたが、バージョン 0.77 より Pageant では GNU 形式の --long-name にもすべてのオプションで対応しました。以下の説明ではそれらが混在していますが、意味に違いはありません。

9.3.1 起動時に自動的に Pageant に鍵を読み込む

Pageant はコマンドラインに指定した複数の秘密鍵を起動時に自動で読み込めます。コマンドラインはこのようになります:

C:\PuTTY\pageant.exe D:\main.ppk D:\secondary.ppk

鍵が暗号化されている場合、Pageant は起動時にパスフレーズを求めます。

Pageant がすでに動作している場合、そちらの Pageant に鍵を読み込みます。

9.3.2 Pageant から他のプログラムを動かす

Pageant が起動してコマンドラインで指定した鍵を読み込んだときに別のプログラムを起動するようにできます。そうするとそのプログラム (PuTTY とか、Plink を使う WinCVS など) は Pageant が読み込んだ鍵を使えます。

それにはコマンドに続けて -c オプションを指定します:

C:\PuTTY\pageant.exe D:\main.ppk -c C:\PuTTY\putty.exe

訳注: -c の後はすべて別プログラムのパラメータになります。

9.3.3 Windows OpenSSH との統合

Windows 版 OpenSSH は Pageant と同じ仕組みで SSH エージェントと通信します (Windows 名前付きパイプ)。つまり Windows OpenSSH は Pageant の名前付きパイプを見つけられれば、直接 Pageant と通信できます。

Pageant が起動した時、Windows の ssh.exe にどこから Pageant と通信できるかを教えるための OpenSSH の設定ファイルを書き出すことができます。 Windows の SSH 設定にこのファイルを追加すると、ssh.exe は自動的に Pageant をエージェントとして使うため、鍵を一か所にまとめておいて両方の SSH クライアントから使えます。

オプション --openssh-config と、続けてファイル名を記述します。

OpenSSH の設定からこのファイルを参照するためには “Include” ディレクティブを使います。例えば、次のように Pageant を起動します: (もちろんユーザ名は書き換えてください)

pageant --openssh-config C:\Users\Simon\.ssh\pageant.conf

そして、このようにディレクティブを設定ファイル “.ssh\config” に追記します。 (pageant.conf が同じディレクトリにある場合です。)

Include pageant.conf

注意: この方法は Windows 版の C:\Windows\System32\OpenSSH\ssh.exe にインストールされる OpenSSH でのみ動作します。 (見つからない場合、インストールの追加機能としてインストールできます。例えば、設定 > アプリ(と機能) > オプション機能 > 機能の追加 > OpenSSH クライアント にあります。)

他のバージョンの OpenSSH for Windows もあります。有名なのは Windows 版 git 添付のものです。これらは同じ設定では動かないでしょう。なぜならそれらは MinGW や MSYS といった Unix エミュレーションレイヤーに依存していることが多く、Windows のパス記法や名前付きパイプを利用できないことが多いからです。上記の手順は Windows に添付された OpenSSH でのみ動作します。

そのため Windows の git で Pageant の持つ SSH 鍵を使いたいならば、環境変数 GIT_SSH が別のプログラムを指すようにしなくてはなりません。先ほどの手順を行えば c:\Windows\System32\OpenSSH\ssh.exe に設定もできます – ですが、Plink を指定するのも同じくらい簡単です!

9.3.4 Unix ドメインソケット: WSL 1 との統合

Pageant は WinSock 実装の“Unix ドメインソケット”からの接続を受け付けられます。これは初期の Windows Subsystem for Linux (現在 WSL 1 と呼ばれます) にある Unix ドメインソケットと相互運用できます。そのため Pageant にこれらから受け付けるように指定すると、WSL 1 のプロセスは Pageant と直接通信できます。

設定するには、Pageant を --unix オプションにパス名を付けて起動します。そうしたら、WSL 1 の環境変数 SSH_AUTH_SOCK に そのパス名を WSL 用に変換した上で設定します。

例えば、このように起動して

pageant --unix C:\Users\Simon\.ssh\agent.sock

WSL 1 で、環境変数には

SSH_AUTH_SOCK=/mnt/c/Users/Simon/.ssh/agent.sock

あるいは、WSL の .ssh/config ファイルに一行

IdentityAgent /mnt/c/Users/Simon/.ssh/agent.sock

と追加します。しかしこれは ssh コマンド自体には使えますが、ssh-add コマンドがエージェントを見つけられません。

セキュリティのメモ: Unix ドメインソケットは親ディレクトリのファイル保護によって他のユーザのアクセスから守っています。もしあなたの Windows 機がマルチユーザ環境ならば、ソケットは他のユーザが全くアクセスできないディレクトリに作ります。 (実際には環境を問わず一般の原則として、良い考えです。)

互換性のメモ: WSL 2 のプロセスはこの方法では Pageant と通信できません。 because WSL 2 の Unix ドメインソケットは別個の Linux カーネルで管理されていて、WinSock のカーネルとは異なるためです。

9.3.5 起動時に鍵の一覧を表示する

Pageant を --keylist オプションで起動すると、起動してすぐにメインウインドウを表示します。

9.3.6 Windows プロセス ACL を制限する

Pageant は他の PuTTY ユーティリティと同様に -restrict-acl オプションに対応しており、Pageant プロセスのアクセス制御をロックダウンできます。必要性については Section 3.11.3.28 を参照してください。

デフォルトでは Pageant が -restrict-acl オプションで起動しても、Pageant のシステムトレイメニューから起動した PuTTY にオプションは引き継がれません。 -restrict-putty-acl で挙動を変更できます。 (これについても詳細は section 3.11.3.28 を参照してください。)

9.3.7 自動的に再暗号化する

[Custom] Pageant に -reencrypt-on オプションを渡すと、再暗号化できる鍵すべての再暗号化を自動で行えます。書式は次の通りです:

-reencrypt-on=PARAMETERS

PARAMETERS にはどのような状況で再暗号化を行うかを , (コンマ) 区切りのパラメータで指定します:

suspend
PC がスリープ状態になったとき
display_off
ディスプレイへの出力が Windows によって切られたとき (省エネルギー設定)
away
退席中モードになったとき
lid_close
ノート PC の蓋が閉じられたとき
any_event
上記のいずれか
idle:MINUTES
一定時間の間、鍵一覧の表示や鍵の追加削除、署名やパスフレーズの入力などの鍵操作を行わなかったとき。

MINUTES には 1 から 14400 の範囲の数で時間(分)を指定します。また時間の単位として s (秒), m (分), h (時間), d (日) を接尾できます。時間は Windows のタイマー機構を使用するため、実時間通りにはならない場合があります。

timeout:MINUTES
Pageant でパスフレーズ入力ウインドウを閉じてから一定時間経過したとき。パスフレーズの正誤は問いません。MINUTES の指定は idle: と同様です。

suspend, display_off, away, lid_close については先頭に - (マイナス) を付けて any_event の指定から除外できます。

display_off, away, lid_close は Windows 7 では対応していない場合があります。また lid_close は PC が対応している必要があります。

指定例:

C:\PuTTY\pageant.exe -reencrypt-on=any_event,-display_off,timeout:10.5h

9.4 エージェント転送を使う

エージェント転送とは SSH サーバ上のアプリケーションがクライアント上のエージェントと通信する仕組みです。

今のところ SSH-2 のエージェント転送が使えるかはサーバによります。 Pageant のプロトコルは OpenSSH と互換性があります。 ssh.com サーバは異なるエージェントプロトコルを使います。 PuTTY はまだサポートしていません。

エージェント転送を有効にするには、まず Pageant を起動します。そして “エージェント転送を許可する / Allow agent forwarding” が有効になった PuTTY の SSH セッションを設定します (section 4.23.7 参照)。セッションを普通に開きます。 (代わりにコマンドラインオプション -A も使えます。Section 3.11.3.10 を参照してください。)

うまく行くと、サーバのアプリケーションは Unix ドメインソケットにアクセスできるようになります。 SSH サーバがソケットから PuTTY に、PuTTY はエージェントに転送します。実際にそうなっているかは Unix サーバマシンで次のコマンドを入力して確認できます:

unixbox:~$ echo $SSH_AUTH_SOCK
/tmp/ssh-XXNP18Jz/agent.28794
unixbox:~$

結果が空行の場合、エージェント転送が有効になっていません。

これで ssh をサーバで実行して接続した別のサーバが Pageant の鍵を承認すると、パスワードなしでログインできます:

unixbox:~$ ssh -v otherunixbox
[...]
debug: next auth method to try is publickey
debug: userauth_pubkey_agent: trying agent key my-putty-key
debug: ssh-userauth2 successful: method publickey
[...]

その SSH 接続でもエージェント転送を有効にすると (方法はサーバ側の SSH クライアントのマニュアルを参照してください)、認証鍵は接続した次のマシンでも使えます。 2 つの SSH 接続を介して実際の鍵があるわけです。

さらに、それら SSH サーバに秘密鍵がある場合、そのサーバで ssh-add コマンドを実行して Pageant に送れます:

unixbox:~$ ssh-add ~/.ssh/id_rsa
Need passphrase for /home/fred/.ssh/id_rsa
Enter passphrase for /home/fred/.ssh/id_rsa:
Identity added: /home/fred/.ssh/id_rsa (/home/simon/.ssh/id_rsa)
unixbox:~$

これでエージェント転送をしているそれぞれのマシンで使えるようになります (追加したクライアントより下流のサーバだけではありません)。

9.5 鍵を復号せずに読み込む

鍵は復号せずに Pageant に追加できます。鍵ファイルは Pageant のメモリに暗号化されたまま保持されて、クライアントプログラムが最初に鍵を使おうとしたときに、Pegeant はダイアログボックスを表示し、復号するためのパスワードを求めます。

これは鍵を使うのがローカルで動作する PuTTY でも、リモートクライアントでエージェント転送を使って Pageant にアクセスしていても同様に行われます。

[Custom] 署名にパスフレーズが必要な場合は、署名の確認ダイアログは表示されません。

鍵を Pageant に暗号化されたまま追加するには、Pageant のメインウインドウで“鍵の追加 (暗号化状態) / Add Key (encrypted)”を押すか、システムトレイの Pageant アイコンを右クリックし、メニューから“鍵の追加 (暗号化状態) / Add Key (encrypted)”を選びます。 Pageant はファイル選択ダイアログを表示するので、通常の“鍵の追加”ボタンと同様に鍵を選びます。しかしパスフレーズは求められません。代わりに、鍵はメインウインドウに“(暗号化状態 / encrypted)”という文字付きで表示されます。

Pageant を起動するときに最初から暗号化状態の鍵を読み込むには、“--encrypted”オプションをコマンドラインで指定します。例えば:

C:\PuTTY\pageant.exe --encrypted d:\main.ppk

鍵が復号されて最初に使われると、復号されたままとなるため何度でも署名に利用できます。メインウインドウは鍵を“(再暗号化可能 / re-encryptable)” として表示します。ここから、パスフレーズが必要な暗号化状態に戻せます。 Pageant のメインウインドウにある“再暗号化 / Re-encrypt”ボタンを押します。

すべての暗号化状態で追加した鍵は、システムトレイメニューの“すべての鍵を再暗号化 / Re-encrypt All Keys”によって“再暗号化 / re-encrypt”できます。 (暗号化状態で追加していない復号した鍵は維持されるので注意してください。)

注意: Pageant が持っている鍵を復号するためにパスフレーズを要求するダイアログを表示した際、入力ダイアログにフォーカスを設定できません。私が知る限り、これは悪意のあるソフトウェアに対応するための、Windows による意図的な対策です。そのためパスフレーズを入力する前には入力ダイアログをクリックしてください。そうしないと、あなたが入力したパスフレーズが信頼していないどこかに送られてしまうかもしれません!

9.6 セキュリティの考察

Pageant を公開鍵認証に使うとパスフレーズを毎回入力せず複数の SSH セッションを開けて便利です。さらに復号した秘密鍵をディスクに置かないのでセキュリティ上の利点もあります。セキュリティと利便性の丁度よい妥協点と多くの人が感じています。

しかしやはりこれは妥協です。復号した秘密鍵を Pageant のメモリ上に持つのは、ディスク上の見つけやすいファイルとして保管するよりは良いですが、どこにも保管しないよりはセキュリティが劣ります。これは 2 つの理由によります:

同様に、エージェント転送は他の簡単な認証よりセキュリティが改善していますが、完璧ではありません。 Windows の Pageant に鍵を持つ方がリモートサーバ自身に持つよりも (それがサーバ上のエージェントでも暗号化なしでディスクに置くのでも) セキュリティ的に有利です。なぜならサーバが復号した秘密鍵を扱うなら、管理者やマシンをクラックした人は誰でも鍵を盗んで好きなだけあなたに成りすませるからです。

しかし、サーバマシンの管理者はそのマシンでは常にあなたに成りすませます。そのためサーバマシンにエージェント転送するとそのマシンの管理者がエージェント転送の接続にアクセスし、あなたのどんな秘密鍵での署名でも要求でき、つまり他のマシンにあなたとしてログインできます。これができる状況は限定されます。エージェント転送がなくなればできないですが、Pageant を使ってもサーバの管理者 (かクラッカー) がそうするのを防げません

そのため、サーバマシンの管理者を信頼しない場合はそのマシンではエージェント転送を絶対に使ってはなりません。 (もちろん、秘密鍵をそのマシンに保存してはいけませんし、そこでパスフレーズを入力してもダメですし、どんな方法であれそこから他のマシンにログインするのもアウトです。その意味では Pageant が特別ということはありません。)

9.6.1 認証エージェントの確認機能

[Custom] 認証エージェント機能やエージェント転送で実際に署名する前に Pageant は確認ダイアログを表示します。

ダイアログをキャンセルするか何もせず一定時間がたつと、エージェントは署名を代行しません。サーバ側から不審なタイミングで要求があった場合にこれである程度は気づけるかもしれません。 (鍵の追加要求なども同様に確認を表示します。)

次回から確認しない / Don't ask again”をチェックすると、その鍵では次からは確認せずに同じ対応 (許可/拒否) を行います。

また逆に、過去の確認の指定に関係なく確認を強制できます。システムトレイアイコンを右クリックし、メニューから“常に要求を確認 / Confirm Any Request”をチェックするか、コマンドラインオプション -confirm を指定して起動します。

その他、レジストリの変更により細かな挙動の指定が可能です:


このマニュアルや PuTTY のツールに意見がある場合は、 Feedback page を参照してください。

翻訳についてはフィードバックから送信できます。

©1997-2025 Simon Tatham ©2015-2025 SATO Kentaro

[PuTTY custom build 0.83.ranvis-doc]