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

本番環境のサーバにGitHubのリポジトリをクローンしたり、最新のソースをpullするときに、ユーザIDとパスワードを毎回入力してアクセスしてました。

でも、それだと自分しかgitコマンドを使うことができず、自分以外の人がサーバのメンテナンスをすることができなくなってしまうので、そうならないために、GitHubのリポジトリにDeploy keysを登録して、登録した鍵を使ってリポジトリへのアクセス認証ができるようにしました。

その時の手順をまとめました。

秘密鍵と公開鍵を作成する

ssh-keygenコマンドを使って鍵を作成します。
GitHubに接続したいサーバにログインして下記コマンドを実行します。

$ ssh-keygen -t rsa -c [GitHubのアカウントのメールアドレス]

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):  ← 作成される場所。問題なければEnter。
Enter passphrase (empty for no passphrase):  ← パスフレーズの入力。省略する場合はそのままEnter。
Enter same passphrase again:  ← パスフレーズの再入力。省略した場合はそのままEnter。

通常のユーザで実行すると「/home/[ユーザ]」パスに「.ssh」というディレクトリが作成され、鍵が作成されます。
suした後で実行すると「/root/」パスに「.ssh」というディレクトリが作成され、鍵が作成されます。

# ssh-keygen -t rsa -c [GitHubのアカウントのメールアドレス]

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  ← 作成される場所。問題なければEnter。
Enter passphrase (empty for no passphrase):  ← パスフレーズの入力。省略する場合はそのままEnter。
Enter same passphrase again:  ← パスフレーズの再入力。省略した場合はそのままEnter。

通常ユーザで実行するかsuで実行するかは、ドキュメントルートなどへのアクセス権などを確認した上で判断してください。

通常ユーザがドキュメントルートなどへのアクセス権がない場合、ドキュメントルートでのgit cloneコマンドが実行できないので、suで鍵を作成した方が良いです。

Deploy keysに鍵の情報を登録する

鍵が作成できたら、「id_rsa.pub」を開いて、コピーします。

GitHubの各リポジトリのメニューの「Settings」をクリックします。

すると、画面の左側に「Deploy key」というメニューがあるので、そこをクリックして、「Add deploy key」をクリックします。

TitleKeyを入力するところがあるので、下記項目に必要なものを入力します。

  • Title:自分がわかりやすい名前
  • Key:先ほどコピーしたid_rsa.pub
  • Allow write access:書き込みが必要かどうか。今回は不要。

Add key」をクリックして正常に登録できれば、Deploy keyの登録は成功です。

サーバからアクセスする

先ほど、鍵を作成したサーバから下記コマンドを実行して、アクセスできるか確認します。

git clone git@github.com:username/yourrepo.git

正常にcloneされれば、アクセス成功です。

git pullする場合は、git cloneしたリポジトリのディレクトリの中で、

git pull

すれば、リポジトリからpullしてくれます。

最後に

本番環境構築する際に、今までは自分のアカウント情報を設定してgitコマンドを利用していましたが、Deploy keysを利用できるようになったので、サーバのメンテナンスなどを自分以外の人に依頼することもできるようになりました。

これにより、開発メンバーと運用メンバーとで役割分担などもやりやすくなると思うので、チームで開発しているのであれば、Deploy keysの活用を検討してみてはいかがでしょうか?