GitHub Logo

[GitHub]一つのサーバで複数の 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 の詳しい設定方法については下記の記事を参考にしてもらえればと思います。

ここでは、「 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 を利用して複数のプロジェクトでリポジトリ管理を行う時や、一つのサーバに複数のシステムをデプロイする必要がある時などに役に立つと思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です