概要
git の認証を毎回入力するのは面倒なので localhost 上に認証情報を保存することができます
今回は基本的な使い方を紹介します
環境
- Ubuntu 16.04
- git 2.7.4
永続的に保存 (store)
認証情報をファイルに保存する方法です
認証情報が消えることはないので登録すればそれ以降はパスワードを尋ねられることはないですが残念ながら保存方法が平文しかありません
永続的に保存する場合は store
を使います
git config --global credential.helper store
cat ~/.gitconfig
[credential]
helper = store
これで store
を使う準備ができました
あとは認証情報を記載したファイルを作成するだけです
git credential-store store
で対話的に登録することができます
以下のような感じで入力していけば OK です
protocol=https
host=github.com
username=hawksnowlog
password=xxxxxxxxxxxxxx
Ubuntu の場合、認証情報が登録されるデフォルトのファイルは ~/.git-credentials
になります
中身を確認すると平分で保存されているのが分かると思います
https://hawksnowlog:xxxxxxxxxxxxxx@github.com
git credential fill
で対話的に認証情報を検索することもできます
暗号化するには
とは言えパスワード情報なので暗号化したくなるので普通です
その場合には git-credential-libsecret
を使います
ただこれを条件として
- Xserver が必要
- git の
2.11+
が必要
があります
なので使える状況としてはデスクトップ Ubuntu として使っている場合かなと思います
一応使う場合は以下の通りです
まず Ubuntu で git の最新版を使えるようにします
add-apt-repository ppa:git-core/ppa
apt -y install git
これで最新版が使えるようになります
あとは libsecret helper を作成し登録します
make --directory=/usr/share/doc/git/contrib/credential/libsecret/
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
cat ~/.gitconfig
[credential]
helper = /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
これで一度パスワードを聞かれたあとに認証情報を入力すれば、その後は聞かれなくなると思います
ちなみに Mac で Github などに認証するときにパスワードを聞かれなくなるのは osxkeychain
という helper を使っているためです
git config --list
credential.helper=osxkeychain
macOS に含まれてる「キーチェーンアクセス」という認証情報を管理する仕組みを使っています
キーチェーンアクセスを開いて保存されているパスワードの一覧を開くと Github の認証が保存されているのを確認できると思います
Tips: git-credential-gnome-keyring は deprecated になっている
以下の方法は deprecated になっているようです
apt install -y libgnome-keyring-dev
make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
一時的に保存 (cache)
認証情報をメモリに一時的に保存する方法もあります
デーモンが常駐しそのデーモンが認証情報をキャッシュしてくれます
指定された timeout が過ぎると自動的に認証情報が削除されます
helper に cache
を登録すれば完了です
git config --global credential.helper cache
cat ~/.gitconfig
[credential]
helper = cache
timeout のデフォルトは 900sec (15miin) になっているようです
--timeout
で指定することもできます
git config --global credential.helper cache --timeout 30000
cache の場合指定時間で認証情報は消えてしまいますが store のように平文ファイルを作らないため安全です
また緊急で全キャッシュを削除したい場合は
git credential-cache exit
で可能です
実は helper は自分で作れる
これまでビルトインである store と cache を紹介しましたが同じように自分でも helper を作ることはできます
git 側で決められたフォーマットで出力すれば良いだけなので簡単に作れます
このページに簡単な Ruby のスクリプトヘルパもあります
例えば認証情報を格納した json ファイルからパスワードを取り出して認証させるみたいなヘルパを作成することもできます
この辺の git のアーキテクチャは素晴らしいなと思いました
最後に
git-credential を使ってみました
ヘルパという外部のプログラムと連携することで認証情報を任意の場所に補完して取り出すことができるようになります
ビルトインは store と cache が使えるようです
またヘルパは独自で作成することもできます
認証情報をすでに管理している仕組みがあるのであればそこにアクセスして取ってくるみたいなことができるようになります
0 件のコメント:
コメントを投稿