使用actions/checkout@v3拉取同组织仓库失败求助
自托管GitHub Enterprise中拉取依赖仓库的SSH主机密钥验证失败排查方案
问题背景
在自托管GitHub Enterprise实例的同一组织下,仓库A依赖仓库B,需要在A的Workflow中同时拉取两个仓库。已生成SSH密钥对,将公钥添加到B的部署密钥,私钥存入A的Actions密钥,但拉取B时出现以下错误:
No ECDSA host key is known for github.company.com and you have requested strict checking.
Host key verification failed.
Error: fatal: Could not read from remote repository.
拉取A完全正常,尝试过配置SSH代理但未解决。
排查方向
1. 给自托管Runner添加GitHub Enterprise主机密钥
自托管Runner默认未存储你的GitHub Enterprise实例的主机密钥,SSH连接时会触发严格校验失败:
- 登录Runner所在服务器,执行命令获取主机密钥:
ssh-keyscan github.company.com - 将输出内容添加到Runner用户的
~/.ssh/known_hosts文件(通常是/home/runner/.ssh/known_hosts);也可以在Workflow中动态添加:- name: 添加GitHub Enterprise主机密钥 run: | mkdir -p ~/.ssh ssh-keyscan github.company.com >> ~/.ssh/known_hosts chmod 600 ~/.ssh/known_hosts
2. 检查部署密钥的配置
- 确认仓库
B的部署密钥已正确添加,公钥内容无多余空格、换行,且开启了读权限(仅拉取无需写权限,但需确保权限勾选正确)。
3. 验证私钥的有效性
- 检查
A仓库中存储的PRIVATE_KEY_B私钥是否完整,开头为-----BEGIN OPENSSH PRIVATE KEY-----、结尾为-----END OPENSSH PRIVATE KEY-----,无多余格式错误。 - 可在Workflow中添加步骤确保私钥权限正确:
- name: 设置私钥权限 run: | echo "${{ secrets.PRIVATE_KEY_B }}" > ~/.ssh/id_ed25519_b chmod 600 ~/.ssh/id_ed25519_b
4. 排查Runner的网络与SSH配置
- 在Runner服务器上执行
ssh -T git@github.company.com(使用对应私钥),验证能否正常连接GitHub Enterprise实例,确认SSH端口(默认22)可访问。 - 检查Runner的
~/.ssh/config文件,确保无针对github.company.com的错误配置(如密钥路径、主机名写错)。
5. 修正Workflow的参数错误
注意到第二个checkout步骤的名称写错为Check out repo A,建议修正为Check out repo B;同时确认repository参数myorg/b的大小写正确(GitHub Enterprise对仓库名大小写敏感)。
内容的提问来源于stack exchange,提问作者Roland Deschain
相关产品推荐
相关产品推荐

