Windows上からGitを使う場合に「Git for Windows」という環境がありますが、このコマンドライン環境からWindowsのPageantにある鍵を使ってSSHを行うことができます。
Windows上のUnixコンソール
Windows上で動くUnix環境を構築したい場合、メジャーなものとしては2つの選択肢があります(なお、Unix環境を構築したいだけなら「VMを立ち上げる」という選択肢もありますが、Windows上で直接動くわけではありませんのでここでは除外します)。両者は方向性が大きく違っています。
Cygwin
Cygwinは、「Windows上でPOSIXを再現する」ことを主眼に置いて開発されています。そのため、Unix向けのソースコードをそのままで実行できることも多いですが、それを実現するためのライブラリは大きなものとなっています。
MinGW/MSYS
MSYSが「Minimal SYStem」の略だということからも伝わるように、プログラム開発に当たって最低限のツールだけを移植していて、あとはWindowsのコードをそのまま使うようになっています。
Git for Windowsもコンパイラなどは付いていませんが、MSYSをベースとしたUnixライクなコンソール環境を用意しています。
Pageantとは
以前の記事でも触れましたが、SSHの秘密鍵を管理するためのツールがあって、「鍵エージェント」と呼ばれています。Windowsでよく使われる鍵エージェントとしてPageantがあって、発祥元のPuTTYはもとより、TeraTermやSourceTree、WinSCPなど、SSH/SCP/SFTPといったプロトコルを扱うWindows用ソフトウェアの多くで扱えます。
CygwinでバリバリのUnix環境を構築するというのであれば、Cygwin内に鍵エージェントを持てばいいのでしょうけど、Windowsでもそこそこ鍵を使う、あるいはWindowsで使うのがメインで、Git for Windowsを使う程度、となればそのためだけに両方で鍵のセットアップをするというのも面倒だし管理もしきれなくなってきます1。
そこで登場するのが、Pageantの鍵をCygwin/MSYS環境に中継するエージェント、cuviper/ssh-pageantです。
実行ファイルのインストール
ふつうのCygwin/MSYSの場合
どちらでも、インストーラから入れられるパッケージの中に、最初からssh-pageant
が用意してあります。Cygwinならsetup.exe
なり適当なラッパーから、MSYSならpacman
経由でインストールできます。
Git for Windowsの場合
Git for WindowsはあくまでGitを動かすため「だけの」環境なので、追加パッケージをインストールできるようにはなっていません。しかも、どういうわけかバイナリリリースとしてもCygwinの32/64ビット、MSYSの32ビットはあるのに、なぜかMSYSの64ビット版が見当たりませんでした。仕方がないので、MSYS2をインストールしてpacman
でssh-pageant
を入れて、そこからssh-pageant.exe
だけ取り出すという、実に富豪的な手段を取りました(パッケージマネージャーで落としてこれる以上、ssh-pageant
だけをどこかでダウンロードできるとは思うのですが)。
シェルへのインストール
Unix系にネイティブなssh-agent
であれば、シェルの操作状況に応じてオンオフすることもあるとは思います。それに対して、ssh-pageant
はあくまでPageantへの中継役に過ぎず、これに直接鍵設定をすることもありません。基本的には.bash_profile
に書いて起動させっぱなしでいいでしょう(1つ常駐していればいいので、.bash_profileのほうが適当です)。設定は、GitHubに書いてあるように、
eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME")
こうするだけです。あとはBashを立ち上げ直せば、「ssh-pageant pid ****」のように出て、セットアップ完了です。あとはGitやSSHでPageantの鍵を使えます。
-
個人的な事情ですが、スマートカード対応のPageantを使っているので、GitのMSYS環境で同等なものを構築するのはかなり面倒、ということもありました。 ↩