我试图使用ssh密钥签出一个回购,因为https身份验证失败,因为我们的防火墙设置关于获得https身份验证与防火墙一起工作的原始问题,将自己的证书注入链
我以前能够使这个工作,但服务是作为一个提升的用户运行的。我们正在设置一个新的服务器,我正试图让事情以一种更标准的方式运行,一切都以github-actions跑步者文档建议的网络服务用户运行。
结帐步骤失败
- 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:权限被拒绝的信息,但是我还没有发现很多关于加载密钥时权限被拒绝的信息。
我发现的一件事是,一个加载密钥权限拒绝错误通常是因为用户没有读取访问ssh密钥?
如果我正确理解结帐操作,它将ssh密钥复制到用户帐户的.ssh
文件夹,以便它可以使用该ssh密钥。
对于NetworkService帐户,应该是C:WindowsServiceProfilesNetworkService.ssh
,如果我去那个文件夹,.ssh
文件夹已经创建,所以看起来至少尝试将SSH密钥复制到该文件夹,我猜密钥在操作完成时被删除,所以它可能已经存在,然后删除,因为。SSH文件夹是空的。
为什么网络服务帐户对它首先写出来的文件没有权限?
或者可能是其他权限失败?
ssh-key选项可以与网络服务帐户一起工作吗?
或者可以指定使用SSH,但不将密钥作为秘密传递,而是将私钥存储在我们的自托管运行程序上?
更新:
我在checkout@v3
的清理步骤中发现了另一个警告:
Warning: Failed to remove SSH key 'C:actions-runner\_work\_temp264e2651-1faf-44c3-9fa5-16a842f0d2a4'
但是在原始设置中,似乎SSH密钥正在安装,没有警告或错误
::save-state name=sshKeyPath::C:actions-runner\_work\_temp264e2651-1faf-44c3-9fa5-16a842f0d2a4
##[debug]Save intra-action state sshKeyPath = C:actions-runner\_work\_temp264e2651-1faf-44c3-9fa5-16a842f0d2a4
processed file: C:actions-runner\_work\_temp264e2651-1faf-44c3-9fa5-16a842f0d2a4
Successfully processed 1 files; Failed processing 0 files
查看checkout操作的调试日志,看起来SSH密钥被复制到临时目录,然后给计算机帐户domaincomputer-name$
完全权限,这些步骤似乎正常完成,所以不清楚为什么当SSH密钥试图加载时,由于权限被拒绝而失败。
C:WindowsServiceProfilesNetworkService.ssh
这将是作为"本地系统帐户"运行的典型服务
考虑到此类服务的数据有其他路径,请检查将SSH密钥保存在C:WINDOWSServiceProfilesLocalService.ssh
或C:WINDOWSsystem32configsystemprofile.ssh
中是否有帮助。
意味着即使在操作完成时删除了密钥,它也可能保留在(或从)其他文件夹中。