GIT 深入理解Git凭证管理

凭证管理

        如果你使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥,这样就可以在不输入用户名和密码的情况下安全地传输数据。然而,这对 HTTP 协议来说是不可能的 —— 每一个连接都是需要用户名和密码的。这在使用双重认证的情况下会更麻烦,因为你需要输入一个随机生成并且毫无规律的 token 作为密码。

幸运的是,Git 拥有一个凭证系统来处理这个事情。下面有一些 Git 的选项:

  • 默认所有都不缓存。每一次连接都会询问你的用户名和密码。

  • “cache” 模式会将凭证存放在内存中一段时间。密码永远不会被存储在磁盘中,并且在15分钟后从内存中清除。

  • “store” 模式会将凭证用明文的形式存放在磁盘中,并且永不过期。这意味着除非你修改了你在 Git 服务器上的密码,否则你永远不需要再次输入你的凭证信息。这种方式的缺点是你的密码是用明文的方式存放在你的 home 目录下。

  • 如果你使用的是 Mac,Git 还有一种 “osxkeychain” 模式,它会将凭证缓存到你系统用户的钥匙串中。这种方式将凭证存放在磁盘中,并且永不过期,但是是被加密的,这种加密方式与存放 HTTPS 凭证以及 Safari 的自动填写是相同的。

  • 如果你使用的是 Windows,你可以安装一个叫做 “winstore” 的辅助工具。这和上面说的 “osxkeychain” 十分类似,但是是使用 Windows Credential Store 来控制敏感信息。可以在 https://gitcredentialstore.codeplex.com 下载。

    你可以设置 Git 的配置来选择上述的一种方式

git config --global credential.helper cache

      部分辅助工具有一些选项。“store” 模式可以接受一个 —file <path> 参数,可以自定义存放密码的文件路径(默认是~/.git-credentials)。“cache” 模式有 —timeout <seconds> 参数,可以设置后台进程的存活时间(默认是 “900”,也就是 15 分钟)。下面是一个配置 “store” 模式自定义路径的例子:

git config --global credential.helper store --file ~/.my-credentials

       Git 甚至允许你配置多个辅助工具。当查找特定服务器的凭证时,Git 会按顺序查询,并且在找到第一个回答时停止查询。当保存凭证时,Git 会将用户名和密码发送给 所有 配置列表中的辅助工具,它们会按自己的方式处理用户名和密码。如果你在闪存上有一个凭证文件,但又希望在该闪存被拔出的情况下使用内存缓存来保存用户名密码,.gitconfig 配置文件如下:

[credential]
helper = store --file /mnt/thumbdrive/.git-credentials
helper = cache --timeout 30000

默认情况下你为什么没有被要求每次都输入用户名密码?

      《Pro Git》7.14 Git-工具-凭证存储中的第一部分,针对这个问题也给出了解释。

如果你是Mac系统,git默认是提供osxkeychain辅助程序来管理你的密码,以至于每次你当你需要提供用户名和密码的时候,osxkeychain辅助程序都默默帮你填写了。

如果你是Windows系统,你可能已经安装了git-credential-winstore了。如果安装的是GitGUI,则提供的是git-credential-manager

除此之外,你也可以使用git-credential-storegit-credential-cache来管理密码,前者在文件中用明文存储密码,后者存在内存中。

而这几种方式都可以同时存在。

 

我们该如何查看辅助程序的类型?

在回答这个问题前,我们先简单看一下,什么是辅助程序?这个翻译对应的其实是credential.helper配置项,我们可以通过如下命令查看当前配置:

git config --list | grep credential

Mac,默认会输出:

include.path=.gitcredential

credential.helper=osxkeychain

对应的也就是Mac的“钥匙串”系统,我们可以通过Mac系统菜单页面“其他->钥匙串访问”功能,搜索git关键字查看。

删除凭证

  • 运行一下命令缓存输入的用户名和密码:
git config --global credential.helper wincred
  • 清除掉缓存在git中的用户名和密码
git credential-manager uninstall

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值