记录一下配置git操做远程仓库时的自动验证,效果以下图:git
本文介绍的是Linux下的配置。Windows上默认已经启用凭证存储和自动验证(依靠wincred实现,之后会使用GCM-Core)。github
首先须要Linux系统上安装了dbus或者是gnome-keyring(依赖于dbus),若是可能的话须要安装libsecret,这是一个更现代的用于凭证管理的库。由于咱们须要借助dbus的service才行实现凭证存储:安全
# Ubuntu sudo apt-get install libsecret-1-0 libsecret-1-dev gnome-keyring # Arch Linux sudo pacman -S libsecret gnome-keyring
其次你须要git 2.11+,一次make,pkg-config,gcc等编译工具,能够用下面的命令安装:bash
# Ubuntu sudo apt install build-essential git pkg-config # Arch Linux sudo pacman pkg-config make gcc g++ git
最后,咱们须要获取我的的ACCESS TOKEN,由于GitHub在2021年末将会废除git操做时的密码验证,全部密码验证须要转换为TOKEN验证,密码只能用于帐户自己的登陆。工具
首先咱们要进设置界面,先打开github.com,而后跟着图里的步骤走:测试
而后点红圈里的开发者设置:ui
你会看到这样的界面,上面列出了已经建立的token和建立/删除按钮:加密
下面是如何建立token,这里建议只勾选你须要的权限,好比提交commit等,权限不是越多越好:3d
建立完成后会把token明文显示给你,必定要妥善保存,由于页面一旦关闭/刷新这串token就只有你一我的知道了:code
一旦token遗失或者没用了,就要及时删除,好比我刚刚为了演示而建立的token演示结束就没用了,因此要删除:
有了access token,下面就能够配置自动登陆验证了。
就是字面意思,用某种方式把密码或者token存储起来,在须要的时候能够获取这些被存储的凭证。
git内置了对凭证存储的支持,经过配置进行:
git config --global credential.helper xxx
若是没有设置那么默认不进行存储,这个xxx
默认有2个选项:
除此以外还支持符合接口规范的第三方应用程序:
git config --global credential.helper your-tool git config --global credential.helper /path/to/your-tool
对于第一种形式,git会去$PATH
里找名字叫git-credential-your-tool
的程序,在设置的时候不用写出前缀。第二种会直接调用绝对路径指定的程序。
选用第三方工具是理由是安全:这些工具一般会加密你的凭证,而且存储在一个不容易致使恶意访问的地方,另外还能够和系统功能集成。
那么从哪找这么好的第三方管理程序呢?别着急,git自带了。
在Ubuntu系统上,git把这些程序的源码存储在:/usr/share/doc/git/contrib/credential/
这里。在Arch Linux上则是/usr/share/git/credential
:
上图是Arch Linux上的状况,gnome-keyring和libsecret、netrc是Linux上可使用的工具。
由于都是源码,因此咱们得先进行编译。
咱们选择libsecret,由于gnome-keyring将来会被废弃。
采用下面的命令编译,以Ubuntu为例子:
cd /usr/share/doc/git/contrib/credential/libsecret sudo make # 若是目录所在的文件系统是ext4,xfs,btrfs,还能够用下面的命令禁止对程序的任何修改 sudo chattr +i git-credential-libsecret
你能够把该目录添加进$PATH,而后指定credential.helper
:
echo '$PATH=$PATH:/usr/share/doc/git/contrib/credential/libsecret' >> ~/.bashrc git config --global credential.helper libsecret
或者你不想修改$PATH,能够这样配置:
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
这样就大功告成了。
为了测试,咱们随便选择一个本身的项目,先clone到本地,而后作些修改后commit。
只有在修改远程仓库的时候才会进行凭证验证,好比push。一般的过程是这样的:
$ git push origin dev Username for 'https://github.com': apocelipes Password for 'https:/apocelipes@github.com':
虽然提示的文字仍然使用的密码,但输入的应该是咱们以前建立的access token。
验证经过后就会把变动push到origin,但配置自动验证后第一次仍然须要输入凭证,而后如今会是这样:
须要为你的密钥环配置一个单独的密码,你也能够选择用户的默认密码,配置完成后凭证就会被安全地存储了。
下次push将不会再验证用户名和凭证,效果和文章开头的图片里同样。
这样自动登陆认证就配置完成了。
https://git-scm.com/book/zh/v2/Git-工具-凭证存储
https://stackoverflow.com/questions/36585496/error-when-using-git-credential-helper-with-gnome-keyring-as-sudo/40312117#40312117