一つのサーバで複数のGitHubリポジトリのDeploy Keyを作成する方法

以前、一つのサーバでGitHub用の公開鍵を作って複数のリポジトリのDeploy Keysに登録しようとすると、「Key is already in use」って怒られてしまい、一つの公開鍵だけだと複数のリポジトリからgit cloneしたり、git pullできなかったので、その際の解決方法を説明していきます。

この設定を行えば、一つのサーバで複数のリポジトリからDeploy Keyを利用したgit cloneとかgit pullができるようになります。

公開鍵を作成する

サーバにアクセスして公開鍵を作成します。

ssh-keygen -t rsa -f repo_a

-f」オプションを使いファイル名を指定します。

パスフレーズを必要に応じて設定して鍵が正しく作成されると、~/.sshの直下に「repo_a」と「repo_a.pub」の2つのファイルが作成されます。

repo_b」という公開鍵も作成します。これで2つのリポジトリに対する公開鍵を作成したことになります。

ssh-keygen -t rsa -f repo_b

ここで注意が必要なのは、ちゃんとGitHubやソースコードの保存場所へのアクセス権があるユーザで上記のコマンドを実行することです。そうじゃないと適切な場所の「.ssh」ディレクトリにファイルが作成されません。

SSHの接続先の設定を行う

先ほど作成した鍵をリポジトリに応じて使い分けるためにSSHの接続先の設定を行います。「~/.ssh/config」ファイルを作成し、下記のように設定していきます。

vim ~/.ssh/config

Host github-repo_a
     User git
     Port 22
     HostName github.com
     IdentityFile ~/.ssh/repo_a
     TCPKeepAlive yes
     IdentitiesOnly yes

Host github-repo_b
     User git
     Port 22
     HostName github.com
     IdentityFile ~/.ssh/repo_b
     TCPKeepAlive yes
     IdentitiesOnly yes

GitHubのDeploy Keyに公開鍵を設定する

Deploy Keyの詳しい設定方法については下記の記事を参考にしてもらえればと思います。

GitHubのリポジトリにDeploy keysを登録してパスワードなしでアクセスする

ここでは、「repo_a」というリポジトリのDeploy Keyに「repo_a.pub」を、「repo_b」というリポジトリのDeploy Keyに「repo_b.pub」を設定したことにします。

Git cloneする

repo_a」のリポジトリからクローンする場合は、下記のようにコマンドを実行します。

git clone git@github-repo_a:username/repo_a.git

repo_b」のリポジトリからクローンする場合は、下記のようにコマンドを実行します。

git clone git@github-repo_b:username/repo_b.git

最後に

公開鍵を別名で作成し、SSHの接続先の設定を行うことで、一つのサーバで複数のリポジトリに対してクローンやプルができるようになりました。Redmineを利用して複数のプロジェクトでリポジトリ管理を行う時や、一つのサーバに複数のシステムをデプロイする必要がある時などに役に立つと思います。