Bitbucketで1つの端末に複数アカウントのSSH鍵を登録しておく方法
Bitbucketでは同一端末からの複数のアカウント分のSSH鍵を登録しておくことができません。ここでは、ホスト名を偽装して接続を個別設定にする方法を紹介します。
なぜSSH鍵を登録しておく必要があるのか
レポジトリのクローンはhttps経由でもできますが、SSH鍵を登録しておくとpushなどをするときにいちいちパスワードを聞かれなくなるというメリットがあります。作業のたびにパスワードを聞かれるなら設定しておく方が効率がよくなります。
SSH鍵を作成する
通常なら、以下のように作成します。
ssh-keygen -t rsa -C "" -f ~/.ssh/bitbucket/id_rsa
今回は以下のように作成します。
ssh-keygen -t rsa -C "" -f ~/.ssh/private_bitbucket/id_rsa
各オプションの説明は以下になります。
-t rsa | 作成する鍵の暗号化形式を「rsa」(デフォルト)、「dsa」「ecdsa」「ed25519」から指定します。ここでは「rsa」と指定しています。 |
---|---|
-C "" | 公開鍵の末尾のコメントを指定します。デフォルトは「ユーザー名@ホスト名」。「-C ""」でコメントを削除します。 |
-f ~/.ssh/bitbucket/id_rsa | ファイルの設置先を指定します。ここでは「~/.ssh/bitbucket/id_rsa」と指定しています。 |
これで、/.ssh/private_bitbucket/にSSH鍵が作成されました。
SSH鍵を登録する
Bitbucketにログインしたら、ユーザーアカウントの「Personal settings」のページへ移動します。
セキュリティ項目にある「SSH鍵」のページへ移動します。
「鍵を追加」ボタンから鍵を追加します。
「Label」は任意の名前を。「Key」には事前に作っておいたSSHの公開鍵(id_rsa.pubのほう)をコピペして登録します。
/.ssh/configの設定
ここでは、ホスト名を偽装して接続を個別に設定にします。
通常なら、以下のように記述します。
Host bitbucket.org HostName bitbucket.org IdentityFile ~/.ssh/bitbucket/id_rsa User git
今回は2個目のbitbucketに接続するための設定が欲しいのですが上記のままでは重複してしまうので、もう1つ作成します。
以下のように1行目と3行目の記述を変更します。
Host private_bitbucket.org HostName bitbucket.org IdentityFile ~/.ssh/private_bitbucket/id_rsa User git
1行目に記述しているHostは任意の名前を設定します。IdentityFileはid_rsaを設置した場所を記述します。
Cloneする
これでCloneができるようになっているはずです。ただ、「クローンの作成」ボタンのコマンドを実行しても以下のようなエラーが出ます。
Cloning into '.'... Forbidden fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
「クローンの作成」ボタンのコマンドは通常は以下のようになっています。
git clone git@bitbucket.org:<アカウント名>/<レポジトリ名>.git
上記のbitbucket.org
の部分を、先ほど~/.ssh/configに2つめとして登録したHost名に書き換えます。
今回はprivate_bitbucket.org
とします。
git clone git@private_bitbucket.org:<アカウント名>/<レポジトリ名>.git
これで、cloneできるようになるはずです。
/.git/configを確認する
プロジェクトファイル内の/.git/configを見ると、urlに今回設定したprivate_bitbucket.org
が登録されているはずです。
[remote "origin"] url = git@private_bitbucket.org:<アカウント名>/<レポジトリ名>.git fetch = +refs/heads/*:refs/remotes/origin/*
これで、pushしたときにエラーが出たり、パスワードを聞かれなかったら成功です。