1

所以,情况就是这样。我正在尝试在 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 提供了这个机会——我做错了什么?

4

1 回答 1

1

cipher在 ssh 中定义config

这是。但是您没有使用 ssh config
要使用您在 ssh 中定义的内容config,您需要使用 URL:

<host>:some/project.git

(替换<host>Host入口值)

并且假设configandkey文件COPY首先在 Dockerfile 中被RUN git clone指令使用。
(除非RUN --mount=type=ssh已经这样做了)

于 2021-11-19T07:52:57.880 回答