我在我的项目中使用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
如果有人能提供实现相同目标的方法,将会非常有用。
谢谢, 佳日
答案 0 :(得分: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
但请阅读: 我的强烈建议是不要将密钥,证书放入容器的文件系统中!这可能会导致强大的安全风险,因为基本上任何获得容器映像的人都可以在密钥有效的服务中验证自己;它会强制您处理容器图像,并且要小心处理加密密钥和证书!
因此,建议将密钥保持在容器外部。这可以通过使用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
首先,使用以下命令构建容器:
docker build -t keygen-container .
使用
启动容器docker run -v /tmp/:/keys keygen-container
将在/ tmp。
中的主机上创建一个键答案 1 :(得分:4)
上面的答案几乎是正确的,但您需要首先进行apt-get更新。也许它在之前的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