BitbucketにSSHでアクセスする(複数アカウントもおっけー)

BitbucketのリポジトリにはHTTPSでアクセスすることができますが、毎回パスワード入れるのも面倒だし、pushする情報が多すぎてエラーになることもあります。SSHを使えばそれを解消できるのですが、公式以外にあまり情報がなかったんでここに書いておくことにします。

複数アカウントで使う方法も意外にわかりづらかったので残しておきます。ちなみに会社用のアカウントでは仕事のソースコードを、個人のアカウントでは各種設定ファイルなどを管理しています。

単アカウントのみSSH接続できれば良い場合

手順はこうです。

・公開鍵と秘密鍵のペアを作る
・公開鍵をBitbucketのアカウントに登録する
・gitプロトコルでアクセス

公開鍵と秘密鍵のペアを作る

Macを想定しています。
ターミナルを開いてssh-keygenコマンドを実行すると、~/.ssh/以下に鍵が生成されます。ここではid_rsaとid_rsa.pubです。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa): #[enterを押す]
Enter passphrase (empty for no passphrase):  #[enterを押す]
Enter same passphrase again: #[enterを押す]
Your identification has been saved in /Users/username/.ssh/id_rsa.
Your public key has been saved in /Users/username/.ssh/id_rsa.pub.
(省略)

公開鍵をBitbucketのアカウントに登録する

Bitbucketにログインして、次の手順でSSH鍵追加のところまでいきましょう。

ラベルと鍵の内容を入力するテキストエリアが現れるので、ラベルには好きな名前、鍵の内容には、id_rsa.pubの内容をコピペします。

gitプロトコルでアクセス

準備ができたのでリポジトリにアクセスしてみます。

usernameというアカウントのrepositoryという名前のリポジトリからクローンすることを考えます。
HTTPSでは次のように実行しますね。

$ git clone https://username@bitbucket.org/username/repository.git

SSHを使う場合は次のようになります。

$ git clone git@bitbucket.org:username/repository.git

すでにHTTPSでclone済のリポジトリSSHに変える

ローカルのリポジトリにある.git/configを書き換えます。

.git/config

[remote "origin"]
        url = https://username@bitbucket.org/username/repository.git # 変更前
        url = git@bitbucket.org:username/repository.git # 変更後
        fetch = +refs/heads/*:refs/remotes/origin/*

これで次からSSHでアクセスしようとしてくれます。

複数アカウントで実現したい

先ほどの設定例では(多分)単一アカウントでしか実現できないと思います。どの秘密鍵を使ってアクセスするかを指示していないからですね。何も指定しない場合はデフォルトの鍵"id_rsa"を使いますが、複数アカウントにしたい場合はそれぞれどの鍵を使うかを教えてあげないといけません。

アカウントごとに鍵を生成する

例えばusername1、username2向けに鍵を生成するとしましょう。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa): /User/username/.ssh/username1 #パスを指定してenterを押す
Enter passphrase (empty for no passphrase):  #[enterを押す]
Enter same passphrase again: #[enterを押す]
(省略)

.ssh/username1、.ssh/username1.pubが生成されました。同じようにしてusername2の鍵も作ります。

公開鍵をそれぞれのBitbucketアカウントに登録

単一アカウントのときと同じ手順で公開鍵(username1.pub、username2.pub)を登録します。アカウントごとに登録してあげる必要があるというところが先ほどと少しだけ違います。

SSHの設定ファイルを作る

SSHの設定ファイルでどの鍵ファイルを使うかを指定してあげます。

~/.ssh/configを次のように編集します。

Host key1 # 好きな名前
        HostName bitbucket.org
        IdentityFile ~/.ssh/username1 # 先ほど生成した秘密鍵の名前

Host key2 # 好きな名前
        HostName bitbucket.org
        IdentityFile ~/.ssh/username2 # 先ほど生成した秘密鍵の名前

key1というラベルをつけた設定では、ホスト名はbitbucket.orgで鍵ファイルは~/.ssh/username1を使う、といった意味です。

gitプロトコルでアクセス

この設定を用いてusername1のrepository.git、username2のrepo.gitにアクセスしてみます。

$ git clone git@key1:username1/repository.git
$ git clone git@key2:username2/repo.git

このような感じです。一般的にいえばこうですね。

git clone git@[設定ファイルのラベル]:[Bitbucketのユーザー名]/[リポジトリ名].git