使用 Bash 脚本中的个人访问令牌访问 Github 上的组织存储库

Posted

技术标签:

【中文标题】使用 Bash 脚本中的个人访问令牌访问 Github 上的组织存储库【英文标题】:Access Organization repo on Github using Personal Access Token inside Bash script 【发布时间】:2021-12-27 21:25:00 【问题描述】:

我正在尝试在 bash 脚本中使用以下语法克隆一个 repo

git clone "https://oauth2:[TOKEN]@github.com/[organization]/$reponame.git $REPOPATH/$reponame"

我收到以下错误:

Cloning into 'protos-cusum_hmm-python'...
fatal: unable to access 'https://github.com/[organization]/protos-cusum_hmm-python.git /opt/protolangs/protos-cusum_hmm-python/': The requested URL returned error: 400

当我直接从命令行git clone https://github.com/[organizaiton]/protos-cusum_hmm-python.git 克隆时,它工作正常(可能是因为它使用了我的缓存凭据)

有什么建议吗?

编辑:

删除了 url (git clone https://oauth2:[TOKEN]@github.com/[organization]/$reponame.git $REPOPATH/$reponame) 周围的引号,现在得到了

remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/fluxusinc/protos-cusum_hmm-python.git/'

编辑2:

使用令牌硬编码时:

git clone "https://ghp_...O17xckH@github.com/[organization]/"$reponame".git" $REPOPATH/$reponame

它有效,所以似乎是YAML 的问题

- name: Run proto builder and deploy to repos
        env:
          P_TOKEN: $ secrets.REPO_TOKEN 
        run: |
           chmod +x "$GITHUB_WORKSPACE/build.sh"
           "$GITHUB_WORKSPACE/build.sh"
        shell: bash

【问题讨论】:

使用您的用户名而不是 oauth2 或完全删除 oauth2: 怎么样? @dan1st git clone https://$TOKEN@github.com/[organization]/$reponame.git $REPOPATH/$reponame 产生 fatal: could not read Username for 'https://github.com': No such device or address 你是在写[TOKEN]吗?即左方括号,大写T,大写O,...,大写N,右方括号?如果是这样,那就有问题了,因为 bash 不会用方括号进行任何变量替换。使用https://$TOKEN@github.com/path/to/repo.git(带有文字美元符号、大写T等)和最多双引号,以便bash 扩展$TOKEN 嗯,但是您的 env: 行说的是 TOKEN,而不是 P_TOKEN。所以$P_TOKEN 将是空的(默认情况下访问未设置的变量会产生空字符串;当您使用未设置的变量时,您必须设置一个 bash 选项以获取错误)。 @ 在那一点上应该会让人感到胃痛,我想,但也许 Git 只是说“哦,我想我现在需要在键盘上询问用户名”并尝试这样做(显然失败了,@987654341 @ 因为/dev/tty 没有连接)。 好的,如果他们匹配,我认为这应该只是工作。 GitHub 是否保存运行 bash 脚本的输出?如果是这样,我会设置调试选项(set -x 是这里的主要选项)并观察实际运行的内容。 【参考方案1】:

非常感谢@torek....

结果无论出于何种原因,我不得不将秘密放在回购而不是组织中,并且它起作用了......不知道为什么会这样,因为 github 显示它是压倒一切的

更多信息:

能够通过将秘密 ACTIONS_STEP_DEBUG 从 here 设置为 true 来找出答案。

成功

##[debug]Evaluating: secrets.REPO_TOKEN_GRPC
##[debug]Evaluating Index:
##[debug]..Evaluating secrets:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'REPO_TOKEN_GRPC'
##[debug]=> null
##[debug]Result: null

显示令牌因任何原因为空

【讨论】:

以上是关于使用 Bash 脚本中的个人访问令牌访问 Github 上的组织存储库的主要内容,如果未能解决你的问题,请参考以下文章

带有 Okta 的 Gitlab 访问令牌

如何使用 GitHub REST API 通过我的个人访问令牌访问组织拥有的私有存储库中的文件数据?

在 TortoiseSVN 中使用 github 个人访问令牌

bash 中的访问修饰符

使用 bash、curl 访问 Azure blob 存储

将多个 git 个人访问令牌 (PAT) 与凭据管理器一起使用