【问题标题】:ssh key generation using dockerfile使用 dockerfile 生成 ssh 密钥
【发布时间】:2015-02-14 17:42:42
【问题描述】:

我在我的几个项目中使用 Docker,其中一个要求是使用 Docker 文件生成 ssh 密钥,以便在容器构建时生成一对 rsa 密钥。我已经看到了一些通过以下方式生成密钥的示例.sh 文件和 Dockerfile 具有运行该 .sh 文件的通用性。有没有办法我们可以直接在 Dockerfile 中而不是 .sh 中进行操作

目前我在 Dockerfile 中使用以下内容来生成 ssh 密钥对。但这给了我错误说“/bin/sh ssh-keygen not found”

RUN ssh-keygen -q -t rsa -N '' -f /home/docker/.ssh/id_rsa

如果有人可以提供实现相同目标的方法,那将非常有帮助。

谢谢, 亚什

【问题讨论】:

  • 为什么需要 ssh ??
  • 嗨,我有一个网络应用程序,它使用来自主机的 ssh 密钥身份验证来执行任何操作,这就是原因。
  • 密钥生成工具的名称有点误导。它是开放 SSH 的一部分,这就是原因。

标签: docker ssh-keys dockerfile


【解决方案1】:

问题是 ssh-keygen 在您的容器中尚不可用。这可以很容易地解决,例如通过在 ubuntu 基础镜像上安装 openssl-client 包。

以下 Dockerfile 正是这样做的,并将密钥放在容器的根文件夹中

FROM ubuntu:latest

RUN apt-get -y install openssh-client
RUN ssh-keygen -q -t rsa -N '' -f /id_rsa

但请阅读: 我强烈的建议是根本不要将密钥、证书放入容器的文件系统中!这可能会导致严重的安全风险,因为基本上任何获得容器镜像的人都可以在密钥有效的服务上验证自己;它迫使您像对待加密密钥和证书一样小心处理容器映像!

因此,建议将密钥放在容器外。这可以通过使用 Docker VOLUMES 轻松实现;并且您只需在启动 Docker 容器时将一个包含密钥/容器的卷挂载到 Docker 容器中。

在容器外创建密钥 下面的 Dockerfile 会在容器启动后创建密钥,它可以用于在容器的文件系统之外创建密钥

FROM ubuntu:latest
RUN apt-get -y install openssh-client 
CMD ssh-keygen -q -t rsa -N '' -f /keys/id_rsa

首先,使用以下命令构建容器:

docker build -t keygen-container .

使用启动容器

docker run -v /tmp/:/keys keygen-container

将在 /tmp 中的主机上创建一个密钥。

【讨论】:

  • 嗨,eliasw,非常感谢 :)
  • 嗨 eliasw,非常感谢 :) 有没有办法可以在容器外部生成它,比如在 docker 的 /home 目录中?我还试图从 Dockerfile 中回显 /etc/hosts/ 文件中的某些内容,但没有成功 :(,您知道如何实现吗?
  • 实际上,这很简单: 1) 在您的主机上,运行 ssh-keygen 来创建您的密钥。例如,在 /home/docker 2) 使用 -v 将 /home/docker 挂载到容器中。有关详细说明,请参阅 Volumes 上的 [Docker 文档] (docs.docker.com/userguide/dockervolumes/#volume-def)。
  • 好的,知道了,但我想要的是通过 Dockerfile 在我的主机中的容器外部生成 ssh 密钥。似乎不可能,必须通过运行 ssh-keygen 手动完成。
  • 不,Dockerfile 也可以在容器外创建密钥。我在上面添加了第二个 Dockerfile 来解决问题。
【解决方案2】:

上面的答案几乎是正确的,但您需要先 apt-get update。也许它在以前的 ubuntu 图像上是正确的,但对我不起作用。另外,我首先删除了 localhost 目录中可能存在的所有 id_rsa 文件。

printf "FROM ubuntu:latest \nRUN apt-get update; apt-get -y install openssh-client \nCMD rm /keys/id_rsa*; ssh-keygen -q -t rsa -N '' -f /keys/id_rsa" > Dockerfile
docker build -t keygen-container .
docker run -v /tmp/:/keys keygen-container

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2013-03-17
    • 2019-06-11
    • 2020-08-06
    • 2011-11-10
    • 2011-01-28
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多