GitHub/Bitbucketなどで使うSSHキーを複数アカウントで使い分ける
個人でもGitHubやBitbucketのアカウントを持っている場合に、会社や別の会社のリポジトリにも同じサービスのアカウントを作ることになると、SSHキーをそれぞれに用意する必要がでてきます。
その際のconfigの書き方を毎回調べているので、自分用にメモ。
なお、環境はMacです。
SSHキーの生成
ssh-keygen
コマンドを使ってSSHキーを生成します。
$ ssh-keygen -t rsa -C '<アカウント名やメールアドレスなど>' -f ~/.ssh/<ファイル名>
実行するとパスフレーズを求められるので、設定します。
ファイル名を分けておくことで、同一サービスに複数のファイル(アカウント)で利用することができます。
SSH公開鍵をサービスへ登録
SSH公開鍵をクリップボードへコピー
$ pbcopy < ~/.ssh/<ファイル名>.pub
GitHubへの登録
Bitbucketへの登録
SSH configの設定
同一サービスを複数のアカウントで利用する場合、 github.com
や bitbucket.org
へのリクエストがどのアカウント(つまりどのSSHキー)のものか区別できなくなってしまいます。
そこでSSHの設定ファイルで、複数アカウント用にエイリアスを作成します。
個人用のSSH configは ~/.ssh/config に作成します。
Host github.com HostName github.com IdentityFile ~/.ssh/github_rsa IdentitiesOnly yes Host hoge-github.com HostName github.com IdentityFile ~/.ssh/hoge_github_rsa IdentitiesOnly yes Host bitbucket.org HostName bitbucket.org IdentityFile ~/.ssh/bitbucket_rsa IdentitiesOnly yes Host fuga-bitbucket.org HostName bitbucket.org IdentityFile ~/.ssh/fuga_bitbucket_rsa IdentitiesOnly yes
IdentitiesOnly
は、その Host
へ接続する際に指定した IdentityFile
だけを使うという設定です。
これを付けておかないと、後述する接続確認の際、すでに同一の HostName
へ接続したアカウントがあった場合、そのSSHキーを利用してしまうようなので、厳密にするために付けています。
接続確認
SSH configが正しく設定できたかどうか、各サービスへSSHで接続できるか確認します。
GitHubの場合
$ ssh -T git@hoge-github.com Hi <ユーザー名>! You've successfully authenticated, but GitHub does not provide shell access.
Bitbucketの場合
$ ssh -T git@fuga-bitbucket.org logged in as <ユーザー名>. You can use git or hg to connect to Bitbucket. Shell access is disabled.
上記 ユーザー名 の部分に、保有している別のアカウント名が表示された場合は、すでに認証した別のアカウントのSSHキーが使われている状態です。
上記のSSH configの設定を見なおして、該当 Host
の設定に IdentitiesOnly
を付けて再実行することで、本来のアカウントで接続確認することができます。
cloneの方法 / 既存リポジトリの変更
~/.ssh/config の Host
を元ドメイン以外にしたものをcloneする場合は、通常であれば以下のように実行するところを、
$ git clone git@github.com:hoge/hoge-example.git $ git clone git@bitbucket.org:fuga/fuga-example.git
ホスト名部分を設定した Host
に合わせて変更して実行します。
$ git clone git@hoge-github.com:hoge/hoge-example.git $ git clone git@fuga-bitbucket.org:fuga/fuga-example.git
既存リポジトリ
<プロジェクト>/.git/config を編集します。
... [remote "origin"] url = git@github.com:hoge/hoge-example.git ...
を、
... [remote "origin"] url = git@hoge-github.com:hoge/hoge-example.git ...
のように書き換えることで対応できるもよう。(試していない)
参考
- Generating an SSH key - User Documentation
- Add an SSH key to an account - Atlassian Documentation
- SSH_CONFIG (5)
- [mac]ssh-agentの鍵情報をキーチェーンに保存する – hello-world.jp.net
小悪魔女子大生のサーバエンジニア日記 ― インターネットやサーバのしくみが楽しくわかる
- 作者: aico,株式会社ディレクターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2015/03/18
- メディア: Kindle版
- この商品を含むブログを見る