94
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

gitレポジトリとhttpで通信する場合にユーザ情報の入力を省略する

はじめに

gitでhttpを使ってリモートレポジトリとやり取りする場合、
毎回ユーザ名とパスワードを入力する必要があるので、その手続きを省略できるようにする。

環境

環境要素 バージョンなど
ディストリビューション CentOS Linux release 7.1
Git バージョン 1.8.3.1
Gitレポジトリサービス gitlab.com

作業内容

.netrcを利用する

ホームディレクトリに.netrcを以下の内容で作成する。
ただし、このままでは平文のままパスワードを保存することになるので暗号化を行う。

machineはgitレポジトリのドメイン名,login,passwordの部分は自分のユーザ情報とする。

.netrc
machine gitlab.com
login username
password secret

2018/08/24修正 protocolプロパティは必要ない

この状態でgit push,git pullを行うとユーザ情報の入力が省かれる。

GPGでパスワードを暗号化する

GPGとは

GPG (GNU Privacy Guard)はOpenPGPの規格に沿って作られた暗号化ソフトで、GNU GPLのもとで公開されているオープンソースソフトウェア。

.netrcの暗号化

  • GPGで作った鍵を持っていない場合は以下のコマンドで鍵を生成する
$ gpg --gen-key

鍵生成には時間がかかる場合がある。今回行った環境では30分ほどかかった。
参考 : ssh 越しに「gpg --gen-key」を実行したときに乱数生成の段階までくるとハングしてしまったかのようになるのは,「単に時間がかかっているから」らしい.約20分もかかった.

  • .netrcを暗号化する

暗号化を行うとホームディレクトリに.netrc.gpgファイルが生成される。次に元の.netrcファイルを削除

$ gpg -e -r <email> ~/.netrc
$ ls .netrc*
.netrc  .netrc.gpg
$ rm .netrc

  • git credential helper用のスクリプトに実行権を与え、gitの設定にcredential helperとして追加する

gitで用意されているgpgを使ったnetrc利用のスクリプトがあるので、それに対して実行権を与えることで使えるようになる。

$ sudo chmod +x /usr/share/doc/git-1.8.3.1/contrib/credential/netrc/git-credential-netrc
$ git config --global credential.helper /usr/share/doc/git-1.8.3.1/contrib/credential/netrc/git-credential-netrc

これで、git push,git pullするときに自動的に復号されるので、ユーザ情報の入力なしでpush,pullができるようになる。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
94
Help us understand the problem. What are the problem?