Генерация ключа ssh с использованием файла докеров

Я использую Docker для нескольких моих проектов, в которых одно требование - генерировать ssh-ключи с использованием файла Docker, так что, когда сборка контейнера будет сгенерирована, будет генерироваться пара ключей rsa. Я видел несколько примеров, когда генерация ключей происходит через .sh и Dockerfile имеет commond для запуска этого .sh файла. Есть ли способ, которым мы можем сделать это непосредственно в Dockerfile вместо .sh

В настоящее время я использую следующее в Dockerfile для генерации пары ключей ssh. Но это дает мне ошибку: "/bin/sh ssh-keygen not found"

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

будет действительно очень полезно, если кто-то может обеспечить способ достижения того же.

Спасибо, Яш

Ответ 1

Проблема в том, что ssh-keygen пока недоступен в вашем контейнере. Это можно легко решить, например, установив пакет openssl-client на базовое изображение ubuntu.

Следующий файл Docker делает именно это и помещает ключ в корневую папку контейнера

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.

Ответ 2

Ответ почти правильный, но сначала нужно apt-get update. Возможно, это было правильно на предыдущем изображении ubuntu, но не работало для меня. Кроме того, я удаляю любые файлы id_rsa, которые могут существовать в каталоге localhost.

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