likes
comments
collection
share

Git 工具 - 凭证存储

作者站长头像
站长
· 阅读数 30

如果你使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥,这样就可以在不输入用户名和密码的情况下安全地传输数据。

但是,这对 HTTP 协议来说是不可能的 。

因为每次git push/pull 的操作,每一个连接都是需要用户名和密码的。 这在使用双重认证(Two-Factor Authentication, 2FA )的情况下会更麻烦,因为你需要输入一个随机生成并且毫无规律的 token 作为密码。

如果让账户密码在输入了后,以后就不用输入了? Git 拥有一个凭证系统来处理该事情

如下进行git push 操作,让输入账户密码 Git 工具 - 凭证存储 账户密码输入完毕,然后进行如下命令

Git 工具 - 凭证存储

下次git 操作就不用输入账户密码了

Git 工具 - 凭证存储

下面有一些 Git 的选项:

  • 默认所有都不缓存。 每一次连接都会询问你的用户名和密码。
  • cache 模式, 会将凭证存放在内存中一段时间。 密码永远不会被存储在磁盘中,并且在15分钟后从内存中清除。
  • store 模式, 会将凭证用明文的形式存放在磁盘中,并且永不过期。 这意味着除非你修改了你在 Git 服务器上的密码,否则你永远不需要再次输入你的凭证信息。 该方式的缺点是密码是用明文的方式存放在home 目录下
  • 如果你使用的是 Mac,Git 还有一种 osxkeychain 模式,它会将凭证缓存到系统用户的钥匙串中。 这种方式是凭证存放在磁盘中,并且永不过期,并且是被加密的,这种加密方式与存放 HTTPS 凭证以及 Safari 的自动填写是相同的。
  • 如果使用的是 Windows,可装一个叫做 “Git Credential Manager for Windows” 的辅助工具。 这和上面说的 “osxkeychain” 十分类似,但是是使用 Windows Credential Store 来控制敏感信息。 可以在 github.com/Microsoft/G… 下载。

你可以设置 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
转载自:https://juejin.cn/post/7371423076661723176
评论
请登录