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を書くとき、特に後からどんどん書き足していくような場合には、前後も見て気をつけないといけないですね。