Docker --ssh标志 - 主机密钥验证失败

3
我正在尝试使用Docker构建一个镜像,导入存储在私有GitHub仓库中的npm包:"mypackage": "git@github.com:myaccount/myrepo.git#v0.0.2"。由于我拥有SSH访问权限,因此在本地可以正常工作,但是显然我的Docker容器没有这个权限。我按照以下指南实施了一些启用ssh转发的方法18.09:

https://medium.com/@tonistiigi/build-secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066

https://docs.docker.com/develop/develop-images/build_enhancements/#using-ssh-to-access-private-data-in-builds

使用以下 Docker 文件:
# syntax=docker/dockerfile:experimental
FROM alpine

# Install ssh client and git
RUN apk add --no-cache openssh-client git

# Download public key for github.com
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

# Clone private repository
RUN --mount=type=ssh npm install

然后,运行docker build --ssh default .失败,并显示以下错误:
#13 1.309 npm ERR! Host key verification failed.
#13 1.309 npm ERR! fatal: Could not read from remote repository.
#13 1.309 npm ERR!
#13 1.309 npm ERR! Please make sure you have the correct access rights
#13 1.309 npm ERR! and the repository exists.
#13 1.310 npm ERR!
#13 1.310 npm ERR! exited with error code: 128

我严格按照这份文档操作,但是一直没有成功。我是否漏掉了什么?我在OSX上操作,但是在Travis环境中也遇到了同样的错误。求助!


你是否正在运行 ssh-agent 或者只是使用默认的 .ssh/id_rsa 密钥? - kichik
1
哦,只是使用默认设置;或者至少我认为是这样。我该如何检查? - opticon
--ssh 标志将连接从构建器转发到 ssh-agent。它不会共享您存放密钥的 .ssh 文件夹。您需要运行 ssh-agent - kichik
它是作为守护进程运行的还是其他什么?这是Dockerfile中要运行的命令的一部分吗? - opticon
它在后台运行,是的。只需在使用 docker build --ssh default 之前运行 ssh-agent 即可。默认设置应该匹配。 - kichik
2个回答

2
这对我很有帮助。
Dockerfile提取:
# syntax=docker/dockerfile:experimental
...
RUN mkdir -p -m 0600 /root/.ssh
RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
COPY development/config /root/.ssh
RUN chmod 0600 /root/.ssh/config
RUN --mount=type=ssh git clone **MY_PVT_REPOSITORY**

这是开发/配置文件的内容,你可以在第三行看到正在被复制的内容

Host bitbucket.org
  StrictHostKeyChecking no
  IdentityFile **MY LOCAL PATH**/.ssh/id_rsa 

棘手的问题是,您必须将主机文件路径放到id_rsa中,而不是docker上的路径(例如/home/fabio/.ssh/id_rsa而不是/root/.ssh/id_rsa)。

然后只需启动即可。

  ssh-agent
  export DOCKER_BUILDKIT=1
  docker build --ssh default -f development/Dockerfile .

0
非常感谢您,Filippi先生!
FYI,大家可以查看这篇文章如何在Ubuntu 20.04上设置SSH密钥 基于Fabio的评论,我的实现看起来像这样:
mkdir -p -m 0600 ~/.ssh
echo "$KNOWNHOSTS" >> ~/.ssh/known_hosts
echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_rsa
echo "$CONFIG_SETTINGS" >> ~/.ssh/config
chmod 644 ~/.ssh/known_hosts
chmod 600 ~/.ssh/id_rsa
chmod 0600 ~/.ssh/config

在KNOWNHOSTS GitLab变量中,我已经保存了“ssh-keyscan www.example.com”的输出。
在SSH_PRIVATE_KEY中,我存储了指定用户的SSH私钥。
在CONFIG_SETTINGS中,我有以下内容:
Host www.example.com
  StrictHostKeyChecking no
  IdentityFile ~/.ssh/id_rsa 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接