使用dockerfile生成ssh密钥

pri*_*ank 12 ssh-keys docker dockerfile

我在我的项目中使用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
Run Code Online (Sandbox Code Playgroud)

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

谢谢,Yash

小智 26

问题是你的容器中还没有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
Run Code Online (Sandbox Code Playgroud)

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

因此,建议将密钥保持在容器外部.这可以通过使用Docker VOLUMES轻松实现; 并且你只需在启动它时将一个容纳键/容器的容器装入Docker容器中.

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

FROM ubuntu:latest
RUN apt-get -y install openssh-client 
CMD ssh-keygen -q -t rsa -N '' -f /keys/id_rsa
Run Code Online (Sandbox Code Playgroud)

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

docker build -t keygen-container .
Run Code Online (Sandbox Code Playgroud)

使用启动容器

docker run -v /tmp/:/keys keygen-container
Run Code Online (Sandbox Code Playgroud)

将在/ tmp中的主机上创建一个键.


小智 6

上面的答案几乎是正确的,但你需要先 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
Run Code Online (Sandbox Code Playgroud)