You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions Checkout加载SSH密钥Permission denied问题咨询

问题背景

企业防火墙会向HTTPS证书链注入自定义证书,导致HTTPS协议拉取代码时认证失败,因此需要改用SSH密钥方式检出代码仓库,HTTPS认证相关同类问题可参考公开技术社区的对应讨论。
此前使用高权限用户运行GitHub Actions自托管Runner服务时,SSH拉取代码流程可正常工作。现按照官方文档建议,在新部署的服务器上使用内置NetworkService账户运行自托管Runner服务,执行代码检出步骤时触发失败。

工作流配置

使用的工作流配置如下:

- uses: actions/checkout@v3
  with:
    lfs: true
    ssh-key: ${{secrets.my_private_ssh_key}}

错误日志

执行日志显示密钥加载失败,错误信息如下:

Load key "C:\\actions-runner\\_work\\_temp/d872e64c-0228-457f-9bfa-f9c01b1818ec": Permission denied
git@github.com: Permission denied (publickey).
Error: fatal: Could not read from remote repository.

已排查信息

  • 已查阅大量git@github.com: Permission denied相关问题资料,未找到密钥加载阶段触发权限拒绝的相关说明。现有公开资料提示,Load Key Permission Denied错误通常是由于运行用户对SSH密钥文件无读取权限导致。
  • 按照actions/checkout动作的执行逻辑,运行时会将传入的SSH密钥复制到运行用户的.ssh目录下供Git调用。NetworkService账户对应的.ssh目录路径为C:\Windows\ServiceProfiles\NetworkService\.ssh,查看该目录时发现目录已创建但为空,推测密钥文件在动作执行完成后被自动清理删除。

待确认疑问

  • 为何NetworkService账户对自身写入的密钥文件无访问权限?是否存在其他未被注意到的权限配置问题?
  • actions/checkout的ssh-key参数是否支持在NetworkService账户运行环境下正常使用?
  • 是否可以配置使用SSH方式检出代码,但不通过secret传入私钥,而是直接将预配置的私钥存储在自托管Runner本地使用?

问题更新

在checkout@v3动作的清理步骤中发现如下警告日志:

Warning: Failed to remove SSH key 'C:\actions-runner\\_work\\_temp\264e2651-1faf-44c3-9fa5-16a842f0d2a4'

但密钥初始配置步骤的日志无任何警告或报错:

::save-state name=sshKeyPath::C:\actions-runner\\_work\\_temp\264e2651-1faf-44c3-9fa5-16a842f0d2a4
##[debug]Save intra-action state sshKeyPath = C:\actions-runner\\_work\\_temp\264e2651-1faf-44c3-9fa5-16a842f0d2a4
processed file: C:\actions-runner\\_work\\_temp\264e2651-1faf-44c3-9fa5-16a842f0d2a4
Successfully processed 1 files; Failed processing 0 files

查看checkout动作的调试日志可知,执行时SSH密钥会先被复制到临时工作目录,再为计算机账户domain\computer-name$授予该文件的完整权限,该步骤执行日志显示正常,目前无法定位SSH密钥加载时触发权限拒绝的根因。


内容的提问来源于stack exchange,提问作者TJR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 10:42:51