如何在 Github Actions 中获取 SECRETS 的值?
Posted
技术标签:
【中文标题】如何在 Github Actions 中获取 SECRETS 的值?【英文标题】:How to access the value of SECRETS in Github Actions? 【发布时间】:2019-06-27 11:10:24 【问题描述】:我正在尝试访问发送到 GitHub Action 的 SECRET
s 的值,但我很挣扎。每次返回的值都是[FILTERED]
,不管key是什么,原始值是什么。
我可以毫无问题地访问ENVIRONMENT VARIABLES
,所以我一定是在其他地方搞砸了。
基本上,我要做的是向我的操作/容器发送一个 ssh 密钥,但是在发送任何其他密钥/值作为秘密时,我遇到了同样的问题。
我的(简化的)GitHub Action 如下:
action "Test"
uses = "./.github/actions/test"
secrets = [
"SSH_PRIVATE_KEY",
"SSH_PUBLIC_KEY",
]
env =
SSH_PUBLIC_KEY_TEST = "thisisatestpublickey"
Dockerfile:
FROM ubuntu:latest
# Args
ARG SSH_PRIVATE_KEY
ARG SSH_PUBLIC_KEY
ARG SSH_PUBLIC_KEY_TEST
# Copy entrypoint
ADD entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
入口点.sh:
#! /bin/sh
SSH_PATH="$HOME/.ssh"
mkdir "$SSH_PATH"
touch "$SSH_PATH/known_hosts"
echo "$SSH_PRIVATE_KEY" > "$SSH_PATH/id_rsa"
echo "$SSH_PUBLIC_KEY" > "$SSH_PATH/id_rsa.pub"
echo "$SSH_PUBLIC_KEY_TEST" > "$SSH_PATH/id_rsa_test.pub"
cat "$SSH_PATH/id_rsa"
cat "$SSH_PATH/id_rsa.pub"
cat "$SSH_PATH/id_rsa_test.pub"
这三个cat
命令的输出是:
[FILTERED]
[FILTERED]
thisisatestpublickey
如您所见,我可以获取(并使用)环境变量的值,但不会暴露秘密。
谁有线索?
为了更新这一点,我还尝试在 entrypoint.sh 中回显两个不带引号的秘密:
echo $SSH_PRIVATE_KEY
echo $SSH_PUBLIC_KEY
...在日志中,我看到了$SSH_PRIVATE_KEY
的完整解密内容(即我的 ssh 密钥的实际内容),而$SSH_PUBLIC_KEY
仍然返回[FILTERED]
。
所以,我可以假设我们能够看到动作中的秘密内容,但我不知道为什么我只能看到其中一个,而另一个返回 [FILTERED]
。
这可能是缓存吗?
我只是想找出一种可预测的方式来处理这个问题。
【问题讨论】:
你可以在管道执行中看到一个秘密的内容,这里他们说如何继续,在 unix 的角度下,通过创建一个步骤或其他东西echo $secrets.SECRET_NAME | sed 's/./& /g'
github.community/t/how-to-see-my-git-secrets/123668/5 只是默认情况下就是不可能,因为那些是秘密
【参考方案1】:
如您所见,我可以获取(并使用)环境变量的值,但不会暴露秘密。
那是因为它们是秘密。 Actions 输出已明确清除机密信息,并且不会显示。
文件内容仍然包含秘密内容。
【讨论】:
是的,我一开始也是这么想的——它就是这样设计的。 (抱歉 - 点击发送太快了。)...不过我今天玩的有点多了。我可以回显两个不带引号的秘密echo $SSH_PRIVATE_KEY
和 echo $SSH_PUBLIC_KEY
并且我看到了预期的变量之一的全部内容,我仍然看到另一个变量 [FILTERED]
。我对它们的处理方式完全相同,并得到了意想不到的结果,但到目前为止我还想不通。
SSH_PUBLIC_KEY
不是秘密;它只是一个环境变量。常规环境变量根本不被过滤。
是的,但在这种情况下,SSH_PRIVATE_KEY
和 SSH_PUBLIC_KEY
都被添加为机密。我现在回显$SSH_PRIVATE_KEY
不带引号,我在日志中看到解密的ssh 密钥完整。我还在同一个 entrypoint.sh 文件中以完全相同的方式回显$SSH_PUBLIC_KEY
,不带引号,这仍然返回[FILTERED]
。我无法深究!
啊,对不起。我误读了,我以为是SSH_PUBLIC_KEY
在env
中。再次阅读,我意识到是SSH_PUBLIC_KEY_TEST
。但是在您的问题中,SSH_PRIVATE_KEY
和SSH_PUBLIC_KEY
都标记为[FILTERED]
。您能用您现在看到的内容更新您的问题吗?以上是关于如何在 Github Actions 中获取 SECRETS 的值?的主要内容,如果未能解决你的问题,请参考以下文章
在 Github Actions 中获取 Maven 项目版本
GitHub Actions API:获取查看工作流运行历史记录
我想从 Github Actions 中的 pom.xml 获取项目版本