博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux登录认证源码,图解如何在Linux上配置git自动登录验证
阅读量:5109 次
发布时间:2019-06-13

本文共 2485 字,大约阅读时间需要 8 分钟。

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

1dae0ff63f4c7319be91db475e1c6f36.png

本文介绍的是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,然后跟着图里的步骤走:

b4a770a20030c78ce2b3f7751cd07a46.png

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

8ae26130399765c4824051d17a86c4d0.png

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

97372d22f279773cbacde6c43abe630d.png

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

e714a83d90e02a4d1e702d502ed81146.png

6f4a686116fa8b857b0b117bac97641f.png

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

0a5ea0e9fc0567eeccb432ff45c5bc45.png

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

d11f03b8e0209e97a9f7dd90ae01da7d.png

8c0f929d7c51edaa936331cae6ceb371.png

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

什么是凭证存储

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

git内置了对凭证存储的支持,通过配置进行:git config --global credential.helper xxx

如果没有设置那么默认不进行存储,这个xxx默认有2个选项:store 把凭证用明文存储在$HOME目录下,为了安全建议不要设置它

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:

6bb37c05f47eecec1d78a8450e8a2c67.png

上图是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,但配置自动验证后第一次仍然需要输入凭证,然后现在会是这样:

d33db9cf6730f969b7e3714e5f26d878.png

需要为你的密钥环配置一个单独的密码,你也可以选择用户的默认密码,配置完成后凭证就会被安全地存储了。

下次push将不会再验证用户名和凭证,效果和文章开头的图片里一样。

这样自动登录认证就配置完成了。

转载地址:http://yejdv.baihongyu.com/

你可能感兴趣的文章
struts.convention.classes.reload配置为true,tomcat启动报错
查看>>
MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
Java 多态 虚方法
查看>>
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
万能的SQLHelper帮助类
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
Html5 离线页面缓存
查看>>
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
类库与框架,强类型与弱类型的闲聊
查看>>
webView添加头视图
查看>>
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>
Intel HEX 文件格式
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>