我正在尝试使用 Windows 在 Gitlab CI
上编写一个 PowerShell 脚本来模仿我的 Linux 构建。第一步,我需要添加一个私钥,以便我可以下载所有需要的子模块:
mkdir C:\Users\$env:UserName\.ssh
$key_path = "C:\Users\$env:UserName\.ssh\id_rsa"
echo "$DEPLOY_PRIVATE_KEY" > $key_path
(Get-Content $key_path -Raw).Replace("`r`n","`n") | Set-Content $key_path -Force
Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent
ssh-add
但是,我得到:
Could not add identity "C:\Users\gitlab_runner/.ssh/id_rsa": agent refused operation
而且因为我不太了解 Windows,所以我不确定如何处理这个问题。不幸的是,ssh-add
的 Windows 镜像没有详细模式 -v
。我如何获得有关代理人拒绝的更多信息?拒绝的原因可能是什么?
干杯!
编辑
按照@VonC 的建议,我确保文件夹/ key 的权限不太开放,并且我的代理确实在运行:
$ Cmd /c Icacls %UserProfile%\.ssh /c /t /Inheritance:d
processed file: C:\Users\gitlab_runner\.ssh
processed file: C:\Users\gitlab_runner\.ssh\id_rsa
Successfully processed 2 files; Failed processing 0 files
$ Cmd /c Icacls %UserProfile%\.ssh /c /t /Grant %UserName%:F
processed file: C:\Users\gitlab_runner\.ssh
processed file: C:\Users\gitlab_runner\.ssh\id_rsa
Successfully processed 2 files; Failed processing 0 files
$ Cmd /c Icacls %UserProfile%\.ssh /c /t /Remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
processed file: C:\Users\gitlab_runner\.ssh
processed file: C:\Users\gitlab_runner\.ssh\id_rsa
Successfully processed 2 files; Failed processing 0 files
$ Get-Service ssh-agent
Status Name DisplayName
------ ---- -----------
Running ssh-agent OpenSSH Authentication Agen
从代码的角度来看,我查看了 openssh 存储库的 ssh-add.c
,如果我没记错的话,发现在获取时抛出错误 SSH_ERR_AGENT_FAILURE
身份 list 。
最佳答案
为了以防万一,请确保您刚刚创建的 %USERPROFILE%\.ssh
的权限没有太开放:参见 this answer修复它。
检查 SSH-Agent 服务的状态以确认它确实已启动,如 this issue 所示。 .
关于windows - 如何在 Windows 上调试 "Could not add identity : agent refused operation"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62247463/