GitHubで複数アカウントを使うときの鍵の設定

メモ。何の因果かGitHub上で、一人で複数のアカウントを使い分けたくなったときのための方法。

githubではSSHの鍵をアカウントと紐つけて管理します。だもんで、複数のアカウントを使い分けたいときには、それぞれのアカウント用に複数の公開鍵と秘密鍵を作って、それぞれ設定します。

ところが .ssh/config にIdentityFileを設定する場合、基本的にホスト名別で設定します。github用なら「Host github.com」とか書いたところにIdentityFileの設定を書くことになります。つまり、github用には一つの設定しかないわけですね。そのため、同じクライアントマシン・アカウント上で、単純に git push origin master とかやっても、どっちのアカウントだか分からないわけで。gitのconfigをいじればなんとかなるかなあ、と試してみたのですが、駄目でした。

そこで調べた見たところでは、./ssh/config には一つのホストに複数の鍵が設定できるとのことでした。こんな風に書きます。

Host github.com
 IdentityFile ~/.ssh/some_id.ppk
 IdentityFile ~/.ssh/another_id.ppk

こうすると、some_id.ppkと紐ついてないアカウントの場合、自動的にanother_id.ppkでリトライされ、結果として普通にpushできるようです。

YAMLで気をつけないといけないこと

メモ。今日はRails3のI18Nと戦っていたのですが、そこではまったこと。

例えばこんな風なYAML(つきのRubyのコード)を書いたとします。

require 'yaml'

str = YAML.load <<EOB
foo:
  aaa:
    n1: "A"
  bbb:
    n2: "B"
  aaa:
    n3: "C"
EOB
p str

結果はどうなると思いますか? なんとなく、

{"foo"=>{"aaa"=>{"n1"=>"A", "n3"=>"C"}, "bbb"=>{"n2"=>"B"}}}

みたいなものを期待していたのですが、実は下記のようになります。

{"foo"=>{"aaa"=>{"n3"=>"C"}, "bbb"=>{"n2"=>"B"}}}

一つ目の「aaa」のところで書いたものは、二つ目の「aaa」が来たときに上書きされて消えてしまうわけですね。なんで「n1: "A"」が無視されるんだ! なんかバグってる?! とか思っていたのですが、勘違いでした。ああ。

YAMLを書くとき、特に後からどんどん書き足していくような場合には、前後も見て気をつけないといけないですね。