Gitにパスワード認証なしでPushするまでの手順

git

こんにちは。仁科(@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できるようにするまでの手順は以下の記事を参考にしてください。

【画像付き】Gitのリポジトリ作成から初めて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となっているのがわかります。

リモートリポジトリの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をできていることがわかります。

なにもコミットしていないのでEverything up-to-dateというレスポンスがきているので、新しいコミットがある場合は正しくpushされます。
$ git push origin master

Everything up-to-date

まとめ

以上でGitにパスワードなしでPushをするまでの手順について説明を終わります。

まとめると以下のようになります。

GitHubへのpushで毎回パスワードを聞かれないようにする設定
  1. ssh-keygenで公開鍵と秘密鍵のペアを作成
  2. GitHubに公開鍵を登録し.ssh/configに秘密鍵を登録する
  3. set-urlでリモートリポジトリの向き先をhttpsからgit@github.comに修正

この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!