こんにちは。仁科(@nishina555)です。
gitでソースコードを管理し、GitHubにpushしていると以下のようなコマンドに遭遇したことはありませんか?
$ git push origin HEAD
Username for 'https://github.com': nishina555
Password for 'https://nishina555@github.com':
UsernameとPasswordを毎回聞かれ、そのたびに入力するのは面倒くさいですよね?
今回はこの、gitでpushするたびに毎回聞いてこられるユーザーとパスワードの認証を省略する方法について説明をしたいと思います。
なお、今回の説明の前提は以下のようになっています。
- sampleという名前のリモートリポジトリが存在する
- sampleリポジトリにはパスワード認証でgit pushすることができる
リモートリポジトリの作成からpushできるようにするまでの手順は以下の記事を参考にしてください。
GitHubで鍵認証をするための秘密鍵と公開鍵のペアを作成する
ユーザー名とパスワードの入力は鍵認証を設定することで省略することができます。
ssh接続をするときにパスワード認証から鍵認証に変更することでパスワード入力を省略できることと同じです。
公開鍵と秘密鍵のペアを作成し、公開鍵をGitHub上に登録することでgit pushで毎回ユーザー名とパスワードを聞かれずに済みます。
まずはローカル環境で公開鍵と秘密鍵のペアを作成します。
$ mkdir ~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa
秘密鍵のパーミッションを変更します。
$ chmod 600 id_rsa
上記のコマンドでid_rsa
という秘密鍵とid_rsa.pub
という公開鍵を作成することができました。
この鍵のペアをGitHubとの鍵認証に使っていきます。
秘密鍵をローカルに、公開鍵をGitHubに登録する
まずはsshの設定ファイルに以下の内容を追加します。
これでgithub.comに接続するときにはid_rsaという秘密鍵を利用するという設定ができました。
$ vi ~/.ssh/config
Host github.com
User git
Hostname github.com
IdentityFile ~/.ssh/id_rsa
次に公開鍵をGitHubに登録していきます。
まずは、GitHubのマイページにある『Settings』を選択します。

『SSH and GPG keys』という項目を選択し、『New SSH key』のボタンを押します。
すると、以下のようなテキストフィールドが出てくるのでここに公開鍵(今回の例で言えばid_rsa.pub)の中身の文字列をコピペします。
ここまでできたら公開鍵と秘密鍵のペアの設定が完了です。
以下のコマンドを実行してGitHubとssh接続できるのか確認してみます。
初回のssh接続のときには接続をするかどうかを聞かれるので、yesと答えます。
Hi [ユーザー名]
と返信がくればsshで接続ができていることになります。
$ ssh -T git@github.com
The authenticity of host 'github.com (192.30.255.112)' can't be established.
RSA key fingerprint is xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
Hi nishina555! You've successfully authenticated, but GitHub does not provide shell access.
httpsとなっているリモートリポジトリの向き先を変更する
次にローカルリポジトリのディレクトリに戻り、鍵認証の設定を行います。
git remote -v
でリモートリポジトリのURLを確認することができるのですが、リモートリポジトリの向き先はhttps
となっているのがわかります。
$ git remote -v
origin https://github.com/nishina555/sample (fetch)
origin https://github.com/nishina555/sample (push)
これを先ほど設定した鍵認証に変更するためには以下のように、https://github.com/[ユーザー名]
の部分をgit@github.com:[ユーザー名]
に変更しています。
なお、git remote set-url
はリモートリポジトリの向き先を変更するためのコマンドです。
$ git remote set-url origin git@github.com:nishina555/sample
$ git remote -v
origin git@github.com:nishina555/sample (fetch)
origin git@github.com:nishina555/sample (push)
ここまで完了すると以下のコマンド一発でリモートリポジトリにgit push
することができます。
Everything up-to-dateというレスポンスがきているので正しくpushをできていることがわかります。
$ git push origin master
Everything up-to-date
まとめ
以上でGitにパスワードなしでPushをするまでの手順について説明を終わります。
まとめると以下のようになります。
- ssh-keygenで公開鍵と秘密鍵のペアを作成
- GitHubに公開鍵を登録し.ssh/configに秘密鍵を登録する
- set-urlでリモートリポジトリの向き先をhttpsからgit@github.comに修正
この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!