はじめに
gitでhttpを使ってリモートレポジトリとやり取りする場合、
毎回ユーザ名とパスワードを入力する必要があるので、その手続きを省略できるようにする。
環境
環境要素 | バージョンなど |
---|---|
ディストリビューション | CentOS Linux release 7.1 |
Git バージョン | 1.8.3.1 |
Gitレポジトリサービス | gitlab.com |
作業内容
.netrcを利用する
ホームディレクトリに.netrc
を以下の内容で作成する。
ただし、このままでは平文のままパスワードを保存することになるので暗号化を行う。
machineはgitレポジトリのドメイン名,login,passwordの部分は自分のユーザ情報とする。
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ができるようになる。