所以,情况就是这样。我正在尝试在 Docker WSL2 上使用 BuildKit 构建映像,提供 ~/.ssh/config:
Host <host>
Port 22022
User git
PubkeyAuthentication yes
IdentityFile ~/.ssh/id_rsa
Ciphers +aes256-cbc
做 ssh 密钥添加:
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa
Dockerfile 片段:
FROM debian:10
RUN \
apt update && apt -y install git; \
mkdir /root/.ssh; \
RUN --mount=type=ssh \
ssh-keyscan -t rsa -p 22022 <host> >> /root/.ssh/known_hosts; \
ssh-keyscan -t rsa -p 22022 "$(getent hosts <host> | awk '{ print $1 }')" >> /root/.ssh/known_hosts; \
git clone ssh://git@gitlab.seventest:22022/some/project.git /root/project
但是当 Docker 进行克隆时——我看到了这个:
Cloning into '/root/project'...
#10 0.313 Unable to negotiate with <host ip> port 22022: no matching cipher found. Their offer: aes256-cbc
#10 0.313 fatal: Could not read from remote repository.
#10 0.313
#10 0.313 Please make sure you have the correct access rights
#10 0.313 and the repository exists.
正如您在 config 中看到的,密码是在 ssh 中定义的config
。另外 - 我known_hosts
在 ssh-keyscan 之后有空白。在你问之前 - 我可以轻松地在主机上克隆项目而不会出现这些问题。
我知道我可以通过直接传递 ssh 密钥来绕过这个问题,但是由于 BuildKit 提供了这个机会——我做错了什么?