记录一下配置git操作远程仓库时的自动验证,效果如下图:

本文介绍的是Linux下的配置。Windows上默认已经启用凭证存储和自动验证(依靠wincred实现,以后会使用GCM-Core)。

准备工作

首先需要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等编译工具,可以用下面的命令安装:

# 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,然后跟着图里的步骤走:

然后点红圈里的开发者设置:

你会看到这样的界面,上面列出了已经创建的token和创建/删除按钮:

下面是如何创建token,这里建议只勾选你需要的权限,比如提交commit等,权限不是越多越好:

创建完成后会把token明文显示给你,一定要妥善保存,因为页面一旦关闭/刷新这串token就只有你一个人知道了:

一旦token遗失或者没用了,就要及时删除,比如我刚刚为了演示而创建的token演示结束就没用了,所以要删除:

有了access token,下面就可以配置自动登录验证了。

什么是凭证存储

就是字面意思,用某种方式把密码或者token存储起来,在需要的时候可以获取这些被存储的凭证。

git内置了对凭证存储的支持,通过配置进行:

git config --global credential.helper xxx

如果没有设置那么默认不进行存储,这个xxx默认有2个选项:

  1. store 把凭证用明文存储在$HOME目录下,为了安全建议不要设置它
  2. cache 把凭证存储在内存里15分钟,15分钟后删除

除此之外还支持符合接口规范的第三方应用程序:

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

图解如何在Linux上配置git自动登录验证的更多相关文章

  1. 如何在linux 上配置NTP 时间同步?

    故障现象: 有些应用场景,对时间同步的要求严格,需要用到NTP同步,如何在linux上配置NTP时间同步? 解决方案: 在linux 上配置NTP 时间同步,具休操作步骤,整理如下: 1.安装软件包( ...

  2. 如何在 Linux 中配置基于密钥认证的 SSH

    什么是基于 SSH 密钥的认证? 众所周知,Secure Shell,又称 SSH,是允许你通过无安全网络(例如 Internet)和远程系统之间安全访问/通信的加密网络协议.无论何时使用 SSH 在 ...

  3. 本地Linux服务器上配置Git

    当我们需要拉取远程服务器代码到本地服务器时,我们首先要确定已经配置了正确的Git账号,可以从~/.gitconfig文件(为隐藏文件,需要使用ls -a查看),以及~/.ssh下的id_rsa.pub ...

  4. 如何在Window上使用Git

    开始的时候同事只给了一个地址,类似这样:git@111.111.1.1:ABCDEF (1)如何在Windows上使用Git 有一篇博客不错:http://www.tuicool.com/articl ...

  5. Linux上配置Nginx+PHP5(FastCGI)

    原为地址:http://www.laruence.com/2009/07/28/1030.html Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,以事件驱动的方式编写,所以有非常好的性能,同时 ...

  6. 如何在Linux上使用VIM进行.Net Core开发

    对于在Linux上开发.Net Core的程序员来说, 似乎都缺少一个好的IDE. Windows上有Visual Studio, Mac上有Visual Studio for Mac, 难道Linu ...

  7. 如何在 Linux 上安装应用程序

    如何在 Linux 上安装应用程序 编译自:https://opensource.com/article/18/1/how-install-apps-linux作者: Seth Kenlon原创:LC ...

  8. Linux上安装git

    Linux上安装git Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 而国外的GitHub和国内的Coding都是项目的托管平台.但是在使用Git工具的时候 ...

  9. 如何在Linux上通过grub添加内核参数

    转自Linux中国 我们可以在linux内核启动时为其提供各种各样的参数.这些参数可以自定义内核默认的行为,或者通知内核关于硬件的配置信息.内核参数应在内核启动时通过引导装载程序,如GRUB或LILO ...

随机推荐

  1. AtCoder Beginner Contest 170 D - Not Divisible (数学)

    题意:有一长度为\(n\)的数组,求该数组中有多少元素不能整除其它任一元素的个数. 题解:刚开始写了个分解质因数(我是傻逼),后来发现直接暴力枚举因子即可,注意某个元素出现多次时肯定不满足情况,再特判 ...

  2. python中schedule模块的简单使用 || importlib.import_module动态导入模块

    1 import schedule 2 import time 3 4 def start(): #定义一个函数 5 print("****") 6 7 8 if __name__ ...

  3. 2017, X Samara Regional Intercollegiate Programming Contest E. Bonuses and Teleports (思维,模拟)

    题意:在\(x\)轴上有很多传送点和钻石,当位于传送点上时,可以传送到其他任意传送点(不记操作数),位于钻石上时可以吃掉它,每次可以移动一个单位,问最少多少次可以吃掉所有的钻石. 题解:对于某个位置上 ...

  4. C# 网络加密与解密

    数据在网络传输过程中的保密性是网络安全中重点要考虑的问题之一.由于通过网络传递数据是在不安全的信道上进行传输的,因此通信双方要想确保任何可能正在侦听的人无法理解通信的内容,而且希望确保接收方接收的信息 ...

  5. RSA 加密解密使用实例

    http://www.dtmao.cc/news_show_692109.shtml 本文不讨论RSA加密解密本身,只记录使用方法及遇到的坑,RSA原理及注意事项可在网上查找. 背景:公司的一个需求, ...

  6. Docker网络模式详解

    一.Docker四种工作模式 安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络). none .hosthost:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用 ...

  7. VMware虚拟化与Kubernetes(K8s)类比阐述-适合VMware用户

    概述 容器技术是最近几年非常热门的技术,它似乎就是为云端的应用量身定制的,所以它也被贴上了云原生应用 (Cloud Native Application) 技术的标签.目前最为流行的容器管理调度平台是 ...

  8. 关于st表的推导

    #include <bits/stdc++.h> using namespace std; const int maxn=1e6+7; int st[maxn][32]; int a[ma ...

  9. 云原生系列1 pod基础

    POD解决了什么问题? 成组资源调度问题的解决. mesos采用的资源囤积策略容易出现死锁和调度效率低下问题:google采用的乐观调度技术难度非常大: 而k8s使用pod优雅的解决了这个问题. po ...

  10. Linux directory tree

    Linux directory tree https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard https://en.wikipedi ...