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

企业防火墙禁用22端口时Dockerfile添加GitLab SSH公钥到known_hosts问题

Docker构建时GitLab SSH主机身份校验解决方案

根因说明

你之前执行ssh-keyscan失败的核心原因是:SSH配置中将gitlab.com的访问实际映射到了altssh.gitlab.com:443,但gitlab.com域名的443端口仅提供HTTPS服务,没有监听SSH服务,所以扫描请求会直接无响应。

可用方案

  • 方案1:修正ssh-keyscan扫描目标
    直接扫描GitLab 443端口SSH服务对应的实际域名即可,修改对应Dockerfile行:
    RUN ssh-keyscan -p 443 altssh.gitlab.com >> ~/.ssh/known_hosts
    
    该方案动态拉取官方公钥,适合公钥可能调整的场景,仅要求构建节点网络可连通altssh.gitlab.com:443。
  • 方案2:拷贝本地合法的known_hosts文件到镜像
    可行性:完全可行,只要本地known_hosts中已经存储了altssh.gitlab.com:443对应的正确公钥即可正常校验。
    安全性:只要本地公钥是你此前正常连接GitLab时生成、未被篡改的,就不存在中间人攻击风险,反而比构建时动态拉取更稳定,不受构建节点的网络访问限制。
    对应Dockerfile写法参考:
    COPY docker/config/known_hosts /root/.ssh/known_hosts
    RUN chmod 0600 /root/.ssh/known_hosts
    
  • 方案3:硬编码GitLab公开公钥到镜像
    你可以提前从本地正常连接后的known_hosts文件中复制altssh.gitlab.com:443对应的公钥行,直接写入镜像的known_hosts文件,无需依赖网络扫描也无需拷贝本地文件,稳定性最高:
    RUN echo '[altssh.gitlab.com]:443 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP4HbQv8eKfUCr7mZbMl4jT5v4oWb2w11aU08RrQkfM' >> ~/.ssh/known_hosts
    # 可根据需求补充RSA等其他加密算法的公钥行
    

注意事项

你使用的--mount=type=ssh是透传宿主机SSH代理的安全方案,不会将私钥打包到镜像中,只要镜像内的known_hosts配置正确,就可以正常完成主机身份校验,执行私有仓库克隆操作。

内容的提问来源于stack exchange,提问作者Roel van Endhoven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:45:03