GitLab Runner(Windows)SSH传输文件超时问题求助
解决Windows GitLab Runner服务运行时SSH连接超时问题
问题根源:GitLab Runner以Windows服务运行时使用NT AUTHORITY\SYSTEM账户,而你之前配置的SSH密钥属于Administrator账户,SYSTEM账户无法读取到该密钥,导致SSH连接超时;而命令行运行Runner时用的是Administrator账户,所以能正常使用密钥。
方法1:为SYSTEM账户配置SSH密钥
- 下载微软Sysinternals工具集里的
psexec.exe,打开管理员权限的命令行,执行以下命令打开SYSTEM账户的交互式命令行:psexec -i -s cmd.exe - 在弹出的SYSTEM命令行窗口中,创建SYSTEM账户的SSH配置目录:
mkdir C:\Windows\System32\config\systemprofile\.ssh - 复制
Administrator账户下的SSH私钥(如C:\Users\Administrator\.ssh\id_rsa)和公钥(id_rsa.pub)到上述目录;或者直接在SYSTEM命令行里生成新密钥:ssh-keygen -t rsa -N "" -f C:\Windows\System32\config\systemprofile\.ssh\id_rsa - 将新生成的公钥内容添加到服务器B的
authorized_keys文件中,然后在SYSTEM命令行测试连接:ssh user@serverB - 确保SYSTEM账户的
.ssh目录及密钥文件权限正确:仅授予SYSTEM账户读写权限,避免权限过高被SSH拒绝。
方法2:修改GitLab Runner服务的运行账户为Administrator
- 打开Windows服务管理器(运行
services.msc),找到GitLab Runner服务。 - 右键点击服务,选择「属性」,切换到「登录」选项卡。
- 选择「此账户」,输入
Administrator的账户名和密码,点击「确定」。 - 重启GitLab Runner服务,此时Runner将以Administrator账户运行,直接使用已配置好的SSH密钥。
- 注意:需确保Administrator账户密码未过期,避免后续服务因密码失效停止运行。
方法3:在CI流水线中指定SSH密钥路径
- 在
.gitlab-ci.yml的SSH命令中,通过-i参数明确指定私钥的绝对路径:job_name: script: - ssh -i C:\Users\Administrator\.ssh\id_rsa user@serverB "your_command" - scp -i C:\Users\Administrator\.ssh\id_rsa local_file user@serverB:/remote/path - 右键点击密钥文件(
id_rsa),选择「属性」→「安全」,添加NT AUTHORITY\SYSTEM账户,授予其读取权限,确保SYSTEM账户能访问该密钥。
内容的提问来源于stack exchange,提问作者chyj4747
相关产品推荐
相关产品推荐

