使用 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 上的组织存储库的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GitHub REST API 通过我的个人访问令牌访问组织拥有的私有存储库中的文件数据?