9

我使用--sshdocker buildkit 功能,它在本地运行良好。我想在远程服务器上构建 Docker,为此我使用该-A标志来转发我的本地 github 密钥,例如:

ssh -i "server.pem" -A <user>@<server-ip>

然后在服务器终端中运行:

ssh -T git@github.com

我收到“Hello user”消息,这意味着密钥转发工作正常。
(在服务器上,$SSH_AUTH_SOCK确实是设置的,我可以git clone

现在,在本地构建时,我使用:

DOCKER_BUILDKIT=1 docker build --ssh default=~/.ssh/id_rsa -t myimage:latest .

哪个工作正常。
但是在服务器中,私钥在 ~/.ssh/id_rsa 中不存在。那么我怎样才能将它转发到 docker build 呢?在服务器上试过这个:

DOCKER_BUILDKIT=1 docker build --ssh default=$SSH_AUTH_SOCK -t myimage:latest .

但它不起作用。错误是:

could not parse ssh: [default]: invalid empty ssh agent socket, make sure SSH_AUTH_SOCK is set

即使SSH_AUTH_SOCK已设置

码头工人版本:19.03

4

3 回答 3

9

I had a similar issue and it was fixed quite simply, I wrapped ${SSH_AUTH_SOCK} within curly braces

eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa
DOCKER_BUILDKIT=1 docker build -t myimage:latest --ssh default=${SSH_AUTH_SOCK} .

In the Docker file, I have appropriate RUN instruction to run a command that requires sensitive data

RUN --mount=type=ssh \
    mkdir vendor && composer install
于 2021-04-30T14:32:48.207 回答
1

您需要ssh-agent在您的机器上运行,并且在登录时添加ssh-add或使用的密钥。如果您设置afaik ssh -A -o AddKeysToAgent=true,SSH 将不会自动转发指定的密钥。登录后,您可以运行以确保您的密钥已转发,如果您在那里看到记录,那么现在应该可以正常工作了。-i-Assh-add -Ldocker build --ssh default .

eval `ssh-agent`
ssh-add server.pem
ssh -A <user>@<server-ip>
于 2020-01-22T00:42:18.043 回答
-1

您的问题是您正在指定私钥的显式路径。ssh 挂载支持将默认使用您的代理,但您已告诉它不要这样做。请尝试:

DOCKER_BUILDKIT=1 docker build --ssh default -t myimage:latest .

我正在使用以下内容Dockerfile进行测试:

# syntax=docker/dockerfile:experimental

FROM alpine
RUN apk add --update git openssh
RUN mkdir -m 700 /root/.ssh; \
        printf "Host *\nStrictHostkeyChecking no" > /root/.ssh/config; \
        chmod 600 /root/.ssh/config
RUN --mount=type=ssh ssh git@github.com

如图所示调用,这应该显示来自该ssh git@github.com行的“成功”消息。

于 2020-01-21T12:11:34.590 回答