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