GitリポジトリサーバのSSH鍵を使い分け
自分用のメモ。
基本的には以下のページが非常に参考になる。
謝意を述べたい。
これに、私なりの理解や補足を加えておく。
結論
同一のリポジトリサーバ(GitHubやBitBucketのような)内を、目的やアカウントで、使用するSSH鍵を使い分けたい場合、SSHのホスト設定とGitのローカル設定を駆使すればできる。
Gitグローバル設定
まず、Gitのグローバル設定は空っぽが望ましい。Gitをインストールすると、大抵 git config --global user.email
の設定を推奨されるが、アカウントの使い分けをする上では「うっかりミス」を誘発してしまう。もしEメールを使い分けるなら user.email
をグローバル設定には置かないようにする。もしあるなら以下のようにする。
$ git config --global --unset user.email
SSH設定
例えば、A社用とB社用でGitHubで使うEメールアドレスやSSH鍵を使い分けなければならない場合、それぞれにSSH鍵を発行、登録していたとして、~/.ssh/configファイルに次のように設定する。
Host github_a_company HostName github.com User git IdentityFile ~/.ssh/id_rsa_github_a => これの公開鍵をA社アカウントでGitHubに登録 IdentitiesOnly yes Host github_b_company HostName github.com User git IdentityFile ~/.ssh/id_rsa_github _b => これの公開鍵をB社アカウントでGitHubに登録 IdentitiesOnly yes
Gitローカル設定
あとはプロジェクトのディレクトリに移動し、Gitのローカル側設定を以下のようにする。
$ cd project_a $ git init $ git config user.name "My Name" $ git config user.email myname@a.com $ git config url.github_a_company.insteadof git@github.com
$ cd project_b $ git init $ git config user.name "My Name" $ git config user.email myname@b.com $ git config url.github_b_company.insteadof git@github.com
こうすると、例えばA社のプロジェクトでソースコードをPushすると、
$ cd project_a $ git remote -v origin git@github.com:myaccount/myproject.git (fetch) origin git@github.com:myaccount/myproject.git (push) $ git push origin master
Push時のホスト名は以下のように変化する。
git@github.com => github_a_company (.git/configを適用) github_a_company => git@github.com (~/.ssh/configを適用)
?元に戻っただけ?
否!
github_a_company
を適用した時点で、A社用の「SSH公開鍵」が使われるようになっている。
Gitクローン時
なお、 .git/config
がまだ存在しない、例えば git clone
操作する場合はどうするか?
その場合、ホスト名を ~/.ssh/config
に設定した Host xxx
の xxx
を代わりに使えばできる。
例えば、B社用のSSH鍵でsomeprojectのソースコードをクローンしたい場合は次のようにする。
$ git clone git@github_b_company:someaccout/someproject.git
あとは必要に応じてプロジェクト内でGitを初期化、ローカル設定すればいい。