我在代码中有一些秘密信息,了解到GitHub Actions后,我决定将它们保存在仓库的密码菜单中,以便在我的管道中稍后使用。
然而,现在我需要访问这些秘密信息来开发新功能,但我无法访问。每次我尝试查看这些值时,都会要求我更新密码。没有选项可以仅“查看”它们。
我不想更新任何内容,只想查看它们的值。
如何在项目中查看我的秘密信息的未加密值?
我在代码中有一些秘密信息,了解到GitHub Actions后,我决定将它们保存在仓库的密码菜单中,以便在我的管道中稍后使用。
然而,现在我需要访问这些秘密信息来开发新功能,但我无法访问。每次我尝试查看这些值时,都会要求我更新密码。没有选项可以仅“查看”它们。
我不想更新任何内容,只想查看它们的值。
如何在项目中查看我的秘密信息的未加密值?
这是一个完成上述步骤的 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
使用tmate
允许SSH访问的原因是,GitHub Actions将自动混淆控制台输出中标记为秘密的任何单词。因此,与其仅运行cat secrets.txt
,使用tmate
更好。
话虽如此 - 我同意评论者的意见。通常情况下应避免这样做。秘密是设计成保存在您自己的保密设施中,并且使它们可读给GitHub Actions。GitHub Secrets并不是设计成用于读/写的秘密库,只有对操作的读取权限和对管理员的写入权限。
tail secrets.txt
,但仍显示“***”。操作运行程序如何知道文件仍应加密? - Didatmate
这样的网络服务。不过,对于不太敏感的信息,这应该是可以接受的。 - ACVtmate
。 - DraganescuValentin最简单的方法是:
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'
...
...
在GitHub上运行此操作并检查其控制台。它会显示每个字符之间有空格的秘钥。
在GitHub上运行此操作并检查其控制台。它会显示每个字符之间有空格的秘钥。
secret
的内容,示例如下: - 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
stdout
:s
e
c
r
e
t
我已经设置了一个每天运行的操作来检查这个解决方案是否仍然有效,你可以在这里看到状态。
这里提到的解决方案都对我没用。你可以直接发送带有你的密钥的 HTTP 请求,而不是使用 tmate 或尝试将 secret 打印到控制台。
以下是一个可行的 GitHub Action:
name: Show secrets
on: [push]
jobs:
debug:
name: Show secrets
runs-on: ubuntu-latest
steps:
- name: Deploy Stage
env:
SERVER_SSH_KEY: ${{ secrets.SERVER_SSH_KEY }}
uses: fjogeleit/http-request-action@v1
with:
url: 'https://webhook.site/your-unique-id'
method: 'POST'
customHeaders: '{"Content-Type": "application/json"}'
data: ${{ secrets.SERVER_SSH_KEY }}
提供的示例使用非常简单易用的 webhook.site
但不要忘记来自DannyB答案的重要免责声明:
话虽如此 - 我同意评论者的看法。通常应避免这样做。密码是为了让您将它们保存在您自己的保密设施中,并且额外使它们可读取给GitHub操作。GitHub Secrets并非设计成读/写保密库,仅具有对操作的读取访问权限和对管理员的写入访问权限。
我的用例是恢复我的一个远程开发服务器的丢失ssh密钥。
这是另一种打印您的机密信息的方法。请注意,在生产环境中绝对不要这样做。
- 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'
我在这个帖子中遇到了许多问题,因为我试图恢复一个较长的密码,在输出中它会用 ***
代替部分内容,包括 base64 编码的输出。
但我发现另一种简单的方法,将其编码为十六进制转储,使用 xxd -ps
,然后输出只是安全字符,不会在输出中损坏,然后在计算机上使用 xxd -r -ps
再次解码即可。
- name: Dump secret
run: echo -n "${{ secrets.SECRET_NAME }}" | xxd -ps
我使用了一个已经在构建环境文件中使用的现有操作:
on: push
jobs:
create-envfile:
runs-on: ubuntu-latest
steps:
- name: Make envfile
uses: SpicyPizza/create-envfile@v1.3
with:
envkey_SECRETS: ${{ toJSON(secrets) }}
file_name: .env
fail_on_empty: false
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: cats
path: .
完成后,您可以从操作中的工件选项卡下载它,然后删除它。
${{ toJSON(vars) }}
中传递了参数,尽管这些参数在CLI中也是可见的。 - Dustinrun: echo -n "${{ secrets.MY_SECRET }}" >> foo && cut -c1-1 foo && cut -c 2- foo
my super secret
。m
y super secret***
在2023年第一季度进行了测试。完整示例:
jobs:
environment: dev
example-job:
steps:
- name: Uncover secret
run: echo -n "${{ secrets.MY_SECRET }}" >> foo && cut -c1-3 foo && cut -c4
提示:
azure/cli@v1
查看 Azure 密钥,您可以使用以下命令:name: Show Me the S3cr3tz
on: push # instead push you can use workflow_dispatch to just manually trigger this pipeline
jobs:
ShowSecrets:
name: Show vault secrets
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v3
- name: Azure CLI Login
uses: Azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Get KeyVault Secrets
uses: azure/cli@v1
id: keyvault
with:
inlineScript: |
echo "TEST_AZURE=$(az keyvault secret show --vault-name ThisIsKeyVaultName --name ThisIsKeyVaultVariableName1 --query value -o tsv)" >> $GITHUB_OUTPUT
echo "TEST_AZURE2=$(az keyvault secret show --vault-name ThisIsKeyVaultName --name ThisIsKeyVaultVariableName2 --query value -o tsv)" >> $GITHUB_OUTPUT
- name: Print KeyVault Secrets
run: |
echo ${{ steps.keyvault.outputs.TEST_AZURE }}
echo ${{ steps.keyvault.outputs.TEST_AZURE2 }}
您需要替换 ThisIsKeyVaultName
、ThisIsKeyVaultVariableName1
和 ThisIsKeyVaultVariableName2
。