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

Docker WSL2环境下BuildKit ssh挂载异常 克隆Git仓库提示无匹配加密算法

问题根因
  • BuildKit的type=ssh挂载仅会转发宿主机的SSH代理套接字,不会同步宿主机的SSH配置文件:你在宿主机~/.ssh/config中定义的Ciphers +aes256-cbc规则不会被带入构建容器,容器内默认的SSH客户端未启用aes256-cbc算法,因此触发加密算法协商失败的报错。
  • 配置与实际访问地址不匹配:你Dockerfile中克隆仓库使用的域名是gitlab.seventest,但宿主机SSH配置的Host规则仅针对自定义别名<host>生效,哪怕配置被同步也不会作用于实际的克隆请求;ssh-keyscan执行后known_hosts为空,大概率是你没有将代码中的<host>占位符替换为实际可解析的域名/IP,或者构建容器内无法解析该地址。
修复方案
  1. 在Dockerfile内显式配置容器内的SSH规则,不需要依赖宿主机配置:
FROM debian:10

RUN apt update && apt -y install git && mkdir -m 700 /root/.ssh

RUN --mount=type=ssh \
# 写入Git服务对应的SSH配置,启用要求的加密算法
echo -e "Host gitlab.seventest\n  Port 22022\n  User git\n  PubkeyAuthentication yes\n  Ciphers +aes256-cbc" > /root/.ssh/config && \
chmod 600 /root/.ssh/config && \
# 直接使用实际克隆的域名生成known_hosts记录
ssh-keyscan -t rsa -p 22022 gitlab.seventest >> /root/.ssh/known_hosts && \
ssh-keyscan -t rsa -p 22022 "$(getent hosts gitlab.seventest | awk '{ print $1 }')" >> /root/.ssh/known_hosts && \
git clone ssh://git@gitlab.seventest:22022/some/project.git /root/project
  1. 执行构建命令时显式指定SSH代理转发参数:
DOCKER_BUILDKIT=1 docker build --ssh default .
  1. WSL2环境前置校验:
    构建前确认SSH代理中已加载对应密钥:
ssh-add -l
# 若无密钥输出,重新执行加载操作
eval `ssh-agent -s` && ssh-add ~/.ssh/id_rsa

内容的提问来源于stack exchange,提问作者genesi5

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:04