MAP | TOP > 工房「藤車」 > Cygwin > win-ssh-wrap |
win-ssh-agent よりも先に起動されたプロセスから Cygwin の ssh を使用したい場合などに、 SSH_* 環境変数が受け取れない問題を解消するための、 ラッパープログラムである win-ssh-wrap について説明します。
本ソフトウェアの利用ライセンスは、 商業利用も容易な、 所謂 "MIT/X スタイル" ライセンスを採用しています。
TortoiseCVS や TortoiseSVN と同様の UI を、 Mercurial リポジトリで使用可能にする TortoiseHG がリリースされましたが、 試用してみたところ、 Explorer からの操作の際には ssh によるリポジトリ連携での Cygwin ssh 利用が (パスフレーズ付きの秘密鍵を使用している場合は) できません。
一般に、ssh でパスフレーズ付きの秘密鍵を使用する場合、 パスフレーズの入力は:
のいずれかで行われます (詳細は ssh に関する解説サイトを参照してください)。
「コマンドラインから入力」は、 TortoiseHG が Explorer 経由で実行される場合には意味を持ちません。
「SSH_ASKPASS 環境変数〜」は、 ssh のマニュアル表記上は可能なことになっていますが、 実のところCygwin 環境では機能しません (仮にこの問題が解消しても、 次に述べる理由のために機能しないのですが…)。
「SSH_AUTH_SOCK 環境変数〜」に関してですが、 仮に win-ssh-agent を「スタートアップ」から起動したとしても、 SSH_AUTH_SOCK 環境変数が設定される前に (プロセスとしての)Explorer は起動されているらしく、 Explorer から起動される TortoiseHG は win-ssh-agent が設定する環境変数値を受け取ることができないため、 これも機能しません。
以上の理由により、 通常は TortoiseHG に同梱される PuTTY の ssh クライアント・パスフレーズ管理ユーティリティを利用するようですが:
~/.ssh/config
相当の記述
といったことを (1) 二重に行う覚悟をした上で Cygwin ssh と PuTTY の ssh クライアントを併用するか、 (2) Cygwin ssh の利用を諦めて PuTTY の ssh クライアントを常用するか、あるいは (3) TortoiseHG の利用そのものを諦めるかの選択が必要になります。
しかし個人的には、 (4) Cygwin ssh で TortoiseHG を利用できるようにする、 という選択をしたいところです。
win-ssh-agent は、 環境変数用の Windows レジストリエントリを追加することで、 直接の親子関係に無いプロセスからも SSH_AUTH_SOCK といった環境変数を参照可能にしています。
裏を返せば、 該当する Windows レジストリエントリを読み込むことができれば、 親プロセスの環境変数設定状況に関わらず、 ssh-agent 連携が可能になります。
Cygwin ssh に Windows レジストリから直接環境変数を読み込ませることはできませんが:
というように、 環境変数設定を整えたうえで Cygwin ssh を起動する中間プログラムを用意すれば、 期待する機能は十分果たしてくれます。
win-ssh-agent が立ち上がってさえいれば、 起動のタイミングに関わらずに最新の SSH_AUTH_SOCK 環境変数を受け取れますので:
といった、従来では問題のあった状況でも、 Cygwin ssh と win-ssh-agent との連携が可能になります。
make all
」でコンパイル
/usr/local/bin
や
~/bin
)にコピー
上記手順により、以下の *.exe ファイルが生成されます。
以後の ssh コマンド利用の際には、 これら w- 付きのコマンドを起動してください。
詳細に関しては、アーカイブに同梱される README.ja.txt
ファイルを参照してください。
MAP | TOP > 工房「藤車」 > Cygwin > win-ssh-wrap |