秘密鍵の整理

公開鍵認証で入る host が増えてきたのでいろいろ考えて整理してみた。目的は 2 つ。

  • Plink でも OpenSSH でも同じ鍵を使う
  • host ひとつに公開鍵、 Plink秘密鍵、 OpenSSH 用秘密鍵の組がひとつを対応させる

環境は以下のとおり。

  • ssh client は PuTTY
  • git client は OpenSSH を使うように設定した tortoisegit

で、結論なんだけど %HOME%\.ssh 以下の構成をこうする。

それぞれ以下で説明するよ。

鍵生成は PuTTYgen.exe を使う場合、「変換 -> OpenSSH 形式へエクスポート」を使って id_rsa も同時に作る。逆に msysgit に付属の ssh-keygen を使って鍵を作った場合は PuTTYgen.exe の「変換 -> 鍵のインポート」から id_rsa を読み込んで id_rsa.ppk として保存してやる。

PuTTY秘密鍵指定は設定の「接続 -> SSH -> 認証 -> 認証パラメータ -> 認証のためのプライベートキーファイル」で各 id_rsa.ppk を指定すればいい。

次、 OpenSSH の秘密鍵は %HOME%\.ssh\config を書くことで指定する。例えば以下のような感じ、というかまぁ github help の http://help.github.com/troubleshooting-ssh/ を参考にしただけなんだけど。

Host github.com
    User            git
    HostName        github.com
    PreferredAuthentications publickey
    IdentityFile    ~/.ssh/github/id_rsa

Host example.com
    User            gitosis
    HostName        example.com
    PreferredAuthentications publickey
    IdentityFile    ~/.ssh/example/id_rsa

で、重要なのが Host の値。ここに指定した文字列が ssh.exe に渡されたときにぶら下がってる設定を使う、という仕組みらしいので Host にはちゃんと hostname command 等で調べた値を指定しないといけない。

あとは識別するための情報が directory の名前にしかないから混乱する、って場合は id_rsa を id_rsa.github てな感じで host の名前を一部だけでもくっつけておくといいかも。