herokuで複数アカウントを管理し出すとSSH鍵が複数必要です。

herokuに限らずSSH用の鍵を複数使い回す場合は、~/.ssh/configにSSH接続先情報と使用するSSH鍵を紐付ける設定をおこないます。

今回は、herokuにおいて少しハマったので備忘録を残します。

GitHubでも何でも、要は、レポジトリ毎に使用するSSH鍵を変えたい場合に有効かと思います。

SSH鍵を生成

-Cオプションでコメント残して、-fオプションで生成する秘密鍵ファイル名を指定します。公開鍵名は-fオプションで指定したファイル名末尾に.pubが付いたファイル名で生成されます。

1
2
cd ~/.ssh/
ssh-keygen -C "example@example.com" -f id_rsa_heroku_sample_app

SSH接続情報を設定

~/.ssh/configherokuの接続情報を記述します。

~/.ssh/config
1
2
3
4
5
6
Host heroku_sample_app
        HostName heroku.com
        IdentityFile  ~/.ssh/id_rsa_heroku_sample_app
        User git
        IdentitiesOnly yes
        TCPKeepAlive yes

herokuのURL部分を~/.ssh/configと合わせる

gitレポジトリを作成すると.git/configというファイルが作成されます。

heroku apps:createコマンドを実行してherokuアプリケーションを作成した際にherokuというremoteが定義されます。そしてこのherokuというremoteの接続情報が.git/configに書き込まれます。通常、git@heroku.com: レポジトリ名.gitというURLが設定されているはずです。このURLのheroku.comを先ほど~/.ssh/configHostとして付けた名前に書き換えます。

.git/config
1
2
3
4
[remote "heroku"]
        #url = git@heroku.com:heroku_sample_app.git
        url = git@heroku_sample_app:heroku_sample_app.git
        fetch = +refs/heads/*:refs/remotes/heroku/*


これでgit push heroku masterコマンドでherokuへpushする時には~/.ssh/id_rsa_heroku_sample_appというSSH鍵を使用して接続してくれるようになります。