Fla*_*nix 7 github github-actions
我的代码中有一些秘密,在了解 GitHub Actions 后,我决定将它们保存在存储库秘密菜单中,以便以后在我的管道中使用。
但是,现在我需要访问这些秘密来开发新功能,而我不能。每次我尝试查看值时,它都会要求我更新机密。没有选择只是“看到”它们。
我不想更新任何东西,我只想看到它们的值。
如何在项目中查看我的机密的未加密值?
mic*_*yks 46
最简单的方法是:
name: Show Me the S3cr3tz
on: [push]
jobs:
debug:
name: Debug
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Set up secret file
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
...
...
run: |
echo ${{secrets.AWS_ACCESS_KEY_ID}} | sed 's/./& /g'
...
...
Run Code Online (Sandbox Code Playgroud)
在 GitHub 中运行此操作并检查其控制台。它显示密钥,每个字符之间有空格。
Dan*_*nyB 11
要查看您的 GitHub Secrets,请按照以下步骤操作:
echos所有机密保存到一个文件中。这是一个完整的工作 GitHub Action 来做到这一点:
name: Show Me the S3cr3tz
on: [push]
jobs:
debug:
name: Debug
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Set up secret file
env:
DEBUG_PASSWORD: ${{ secrets.DEBUG_PASSWORD }}
DEBUG_SECRET_KEY: ${{ secrets.DEBUG_SECRET_KEY }}
run: |
echo $DEBUG_PASSWORD >> secrets.txt
echo $DEBUG_SECRET_KEY >> secrets.txt
- name: Run tmate
uses: mxschmitt/action-tmate@v2
Run Code Online (Sandbox Code Playgroud)
tmate为了允许 SSH 访问而使用的原因,而不是仅仅运行cat secrets.txt,是 GitHub Actions 会自动混淆它在控制台输出中作为秘密的任何单词。
也就是说 - 我同意评论者的观点。你通常应该避免这种情况。Secret 的设计目的是让您将它们保存在您自己的保密设施中,此外,使它们对 GitHub 操作可读。GitHub Secrets 并非设计为读/写密钥库,仅对操作进行读访问,对管理员进行写访问。
您可以secret通过使用 python shell 循环遍历 a 来解码 a,如下所示:
- name: Set env as secret
env:
MY_VAL: ${{ secrets.SUPER_SECRET }}
run: |
import os
for q in (os.getenv("MY_VAL")):
print(q)
shell: python
Run Code Online (Sandbox Code Playgroud)
这将打印每个字符,stdout如下所示:
s
e
c
r
e
t
Run Code Online (Sandbox Code Playgroud)
我设置了一个每天运行的操作来检查此解决方案是否仍然有效,您可以在此处查看状态。
这是打印你的秘密的另一种方式。请小心,切勿在生产环境中这样做。
- name: Step 1 - Echo out a GitHub Actions Secret to the logs
run: |
echo "The GitHub Action Secret will be masked: "
echo ${{ secrets.SECRET_TOKEN }}
echo "Trick to echo GitHub Actions Secret: "
echo ${{secrets.SECRET_TOKEN}} | sed 's/./& /g'
Run Code Online (Sandbox Code Playgroud)
我对这个线程中的大多数解决方案都遇到了问题,因为我试图恢复一个更长的秘密,它不断用 替换部分输出***,包括在 Base64 编码输出中。
但我找到了另一种简单的方法,将其编码为十六进制转储xxd -ps,而不是使用 ,然后输出只是一个安全字符,不会在输出中损坏,然后只需在xxd -r -ps计算机上再次解码它
- name: Dump secret
run: echo -n "${{ secrets.SECRET_NAME }}" | xxd -ps
Run Code Online (Sandbox Code Playgroud)
小智 7
我使用了一个已用于构建 env 文件的现有操作:
on: push
jobs:
create-envfile:
runs-on: ubuntu-latest
steps:
- name: Make envfile
uses: SpicyPizza/create-envfile@v2.0
with:
envkey_SECRETS: ${{ toJSON(secrets) }}
file_name: .env
fail_on_empty: false
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: cats
path: .
Run Code Online (Sandbox Code Playgroud)
之后,您可以从操作中的工件选项卡下载它,然后将其删除。