docker - 使用 dockerfile 生成 ssh key

标签 docker ssh-keys dockerfile

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

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

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

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

谢谢, 亚什

最佳答案

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

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

FROM ubuntu:latest

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

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

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

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

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 中的主机上创建一个 key 。

关于docker - 使用 dockerfile 生成 ssh key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504187/

相关文章:

docker - "Docker Toolbox", "docker-machine"和 "Docker Container"是什么关系

css - Vue 元素在生产中缺少样式

php - 无法交换加密 key

docker - Docker Cloud Disable服务端点

docker-compose 多拱

docker - Golang docker 多阶段构建运行失败 : exec: "go": executable file not found in $PATH

ssh-keys - Digital Ocean Droplet 上的 cloud-init .yaml 脚本

linux - 在Linux服务器上设置git

Docker组成继续替换现有容器

mysql - 自定义 Docker MySQL 构建无法运行