GitHub Action使用appleboy/ssh-action如何避免SSH密钥出现在目标服务器
实现方案
1. 优先修复敏感信息存储逻辑(根源解决)
- 禁止将SSH密码、密钥等敏感信息明文写入.github/workflows下的yml配置文件,改用GitHub官方加密存储功能保管敏感信息:
- 进入对应GitHub仓库的
Settings > Secrets and variables > Actions页面,新增自定义加密密钥,工作流中通过${{ secrets.自定义密钥名 }}的格式调用即可,密钥值不会明文出现在任何代码文件中 - 清理仓库历史提交中的明文密码记录,避免历史版本留存敏感信息被拉取到服务器
- 进入对应GitHub仓库的
2. 拉取代码时排除敏感目录
如果你不需要在服务器上保留GitHub Action相关配置,可以在拉取代码后直接删除对应目录,修改SSH登录后执行的命令即可:
- 原有git pull命令调整为组合命令:
git pull origin 分支名 && rm -rf .github/workflows - 如果需要永久排除.github目录,可以配置git稀疏检出规则,后续拉取自动跳过该目录:
# 开启稀疏检出 git config --local core.sparseCheckout true # 配置规则:拉取所有目录,排除.github目录 echo "/*" >> .git/info/sparse-checkout echo "!.github/" >> .git/info/sparse-checkout # 执行拉取 git pull origin 分支名
3. 调整部署流程避免拉取完整仓库
你可以直接在GitHub Action中将需要部署的业务代码打包,通过SCP直接上传到服务器,完全不会传输.git目录、工作流配置等无关文件,从流程上避免敏感文件落地到服务器:
- 可以配合
appleboy/scp-action实现文件上传,不需要在服务器端执行git pull操作
内容的提问来源于stack exchange,提问作者Maik Lowrey
相关产品推荐
相关产品推荐

