先日、『EC2 に構築したサーバーから Github にアクセスしてデプロイをする』というエントリーを書いたのですが、それの補足エントリーになります。
github の Settings で、”Deploy key”の登録を行うことで、EC2に構築したサーバから github にアクセスして clone 出来るようになるといった内容だったのですが、複数の(github)リポジトリに同じ公開鍵を登録しようとすると、”Key is already in use”と怒られてしまいます。
この対応のためには、サーバ側で複数の鍵を生成して登録すれば良いのですが、 ~/.ssh/config を書き換えたりだとか少し手順がめんどくさい&次に同じことをやるときに忘れそうなので、軽く足跡としてまとめておこうと思います。
以下、手順になります。
EC2インスタンス上で鍵を作る
EC2 インスタンスにログインして、以下のコマンドを実行する
1 |
> ssh-keygen -t rsa -f repo_test_a |
“repo_test_a” の部分は、自信で判別のしやすい名前を設定して良い。
するとパスフレーズを聞かれるので、必要に応じてパスフレーズを入力する。
正しく鍵が生成されていると ~/.ssh 以下に、 “repo_test_a” と “repo_test_a.pub” の2つのファイルができる。
“repo_test_a.pub” のほうが公開鍵となる。
説明の便宜上、同様の手順で “repo_test_b” という鍵も生成して、その使い分けを行いたいと仮定して話をすすめる。
SSHの接続先の設定
生成した鍵を使い分けるため、 ~/.ssh/config に設定を書いていく。
~/.ssh/config が存在していなければ、適当なエディタで生成してしまって良い。
~/.ssh/config には、以下のような設定を書く。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Host github-repo_test_a User git Port 22 HostName github.com IdentityFile ~/.ssh/repo_test_a TCPKeepAlive yes IdentitiesOnly yes Host github-repo_test_b User git Port 22 HostName github.com IdentityFile ~/.ssh/repo_test_b TCPKeepAlive yes IdentitiesOnly yes |
Github の Deploy Key に公開鍵を設定する
この手順は、前回のエントリーを参考に設定すれば良い。
ここでは便宜上、”yourrepo_a”というgithubリポジトリの “Deploy key” に “repo_test_a.pub” を、”yourrepo_b”というgithubリポジトリに “repo_test_b” を設定したと仮定する。
EC2 からのアクセス
EC2 からは、”yourrepo_a”を clone したい場合には、次のように clone をする。
1 |
> git clone git@github-repo_test_a:yourname/yourrepo_a.git |
同様に、”yourrepo_b”から clone したい場合には、次のようにすれば良い。
1 |
> git clone git@github-repo_test_b:yourname/yourrepo_b.git |
また、従来通り
1 |
> git clone git@github.com:yourname/yourrepo.git |
とした場合、~/.ssh/id_rsa が利用される点にも注目したい。
まとめ
github の Deploy Key を登録するときに、すでに他のリポジトリに登録されている公開鍵を登録しようとすると、”Key is already in use”と怒られてしまうので、その対応方法として、複数のrsa鍵を作り ~/.ssh/config に接続先を書くことで、鍵の使い分けを行うようにしました。
~/.ssh/config にホスト名を書くことで、複数の鍵が使い分けられる所がポイントでした。