将 git auth 保留为环境变量而不是评估值

Jes*_*mas 5 git security bash

我正在尝试创建一个 bash 脚本来初始化服务器并克隆 git 存储库作为初始化的一部分。

安装用户将个人访问令牌 (PAT) 设置为环境变量 $TOKEN 以通过脚本进行克隆。我希望每个将代码拉取或推送到此克隆存储库的后续用户都可以通过环境变量 $TOKEN 设置其 PAT,而不是使用安装程序使用的原始 PAT。

但是,当脚本克隆存储库时,gitconfig 存储 $TOKEN 的解释值而不是变量 $TOKEN,因此任何后续的拉/推都使用原始安装程序的 PAT。

即当我这样做时:

git clone https://oauth2:$TOKEN@gitlab.com/repo.git
Run Code Online (Sandbox Code Playgroud)

gitconfig 说:

[remote "origin"]
        url = https://oauth2:xxx---actual-token---xxx@gitlab.com/repo.git
        fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)

当我想让它说:

[remote "origin"]
        url = https://oauth2:$TOKEN@gitlab.com/repo.git
        fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何以简单的方式强制每个用户每次都使用他们的令牌。

有任何想法吗?谢谢

bk2*_*204 10

您应该完全避免将令牌放入 URL 中,因为这会向其他用户公开并保存在配置文件中。相反,您可以让用户配置一个特殊的凭证助手来从环境中读取数据,如 Git 常见问题解答中所述(替换author如下):

$ git config credential.helper \
    '!f() { echo username=author; echo "password=$TOKEN"; };f'
Run Code Online (Sandbox Code Playgroud)

如果您想将其作为克隆操作的一部分来执行,则可以使用-c克隆参数来执行此操作:

$ git clone -c credential.helper= \
  -c credential.helper='!f() { echo username=author; echo "password=$TOKEN"; };f' \
  https://gitlab.com/repo.git
Run Code Online (Sandbox Code Playgroud)

的附加空值会credential.helper导致删除任何现有的凭据帮助程序,从而阻止将此令牌添加到用户的凭据帮助程序中。如果您希望用户能够保存它,请删除该指令。

  • 该选项是多值的,因此您可以一次设置多个凭据助手。设置空值会重置列表(如文档所述),以便新的“credential.helper”设置不仅仅会附加到已有的内容。 (3认同)
  • 您正在“gitcredentials(7)”的“配置选项”中寻找“helper”参数。 (3认同)