我在几个项目中使用 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/