Sta*_*tan 37 ssh github-actions secretsmanager
我有一个相当基本的场景。为此,我制作了一个专用的 ssh 密钥并将其添加到我的存储库机密中。
代码被推送到 master
GitHub 操作ssh
通过执行将其上传到服务器echo "${{ secrets.SSH_KEY }}" > key
。
之后,我可以使用此密钥连接到我的服务器,例如 ssh -i key devops@myserver.com lsb_release -a
问题是由于某种原因,GitHub 操作无法将其写入文件,而是将字符***
而不是实际的秘密值写入文件。因此显然我无法连接到我的服务器。
如何使用此密钥与 ssh 连接?有没有不使用文件就可以连接的方法?使用 GitHub 操作完成此常见场景的人能否解释一下?
bk2*_*204 56
GitHub Actions 应该能够以这种方式将机密写入文件。您看到星星的原因是日志被过滤了,所以如果要记录一个秘密,它会在日志中替换为三个星号。这是一种防止意外泄露机密的安全措施,因为日志通常是公开可用的。
但是,如果可能的话,无论如何都避免将机密写入日志是个好主意。你可以这样写你的命令,这样你就不会将秘密写入日志:
- run: 'echo "$SSH_KEY" > key'
shell: bash
env:
SSH_KEY: ${{secrets.SSH_KEY}}
Run Code Online (Sandbox Code Playgroud)
您将在日志中看到的只是echo "$SSH_KEY" > key
,而不是秘密或任何星号。
请注意,这里确实需要引号,因为该>
字符是 YAML 的特殊字符。
如果这无法登录您的服务器,则可能是另一个问题;在一般情况下,这种技术确实适用于编写秘密。
您可以secret
通过使用 python shell 循环遍历 a 来解码 a,如下所示:
- name: Set env as secret
env:
MY_VAL: ${{ secrets.SUPER_SECRET }}
run: |
import os
data = open("file", "w")
for q in (os.getenv("MY_VAL")):
print(q)
data.write(q)
shell: python
Run Code Online (Sandbox Code Playgroud)
这会将每个字符打印到标准输出并将它们存储在名为file
. stdout
将有这样的输出,而文件中应该保存有秘密字符串。
s
e
c
r
e
t
Run Code Online (Sandbox Code Playgroud)
它每天在我的存储库上运行,以检查它是否仍在工作:此处
我找到了一种方法来做到这一点。我们在一个项目中使用了 GatsbyJS,它依赖 .env.production 文件作为 env 变量。我试图将它们传递
env:
给 github 操作,但这不起作用,它们被忽略了。
这是我所做的。我对 .env.production 文件进行了 base 64 编码:
base64 -i .env.production
Run Code Online (Sandbox Code Playgroud)
将输出添加到 github 操作中的 env 变量。然后在我的行动中,我这样做:
echo ${{ secrets.ENV_PRODUCTION_FILE }} | base64 -d > .env.production
Run Code Online (Sandbox Code Playgroud)
这样,我的 .env.production 文件的内容最终会被写入执行 github 操作的机器。
Sta*_*tan -1
好的解决方案是使用 gpg 加密密钥,将其添加到存储库并使用密码在服务器上解密。当然,passprase 应该存储为 github 项目机密。
归档时间: |
|
查看次数: |
16381 次 |
最近记录: |