генерация ssh-ключа с использованием dockerfile

Я использую Docker для нескольких своих проектов, где одно из требований - сгенерировать ключи ssh с помощью файла Docker, чтобы при построении контейнера он генерировал пару ключей 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

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

Спасибо, Яш


person priyank    schedule 16.12.2014    source источник
comment
Зачем тебе ssh ??   -  person Robert    schedule 18.12.2014
comment
Привет, у меня есть веб-приложение, которое использует аутентификацию по ssh-ключу с хост-машины для выполнения любых действий, вот почему.   -  person priyank    schedule 19.12.2014
comment
Название инструмента генерации ключей немного вводит в заблуждение. Это часть открытого SSH, поэтому.   -  person eliasw    schedule 21.12.2014


Ответы (2)


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

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

FROM ubuntu:latest

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

НО ПРОЧИТАЙТЕ: Я настоятельно рекомендую не помещать ключи и сертификаты вообще в файловую систему контейнера! Это может привести к серьезным рискам безопасности, поскольку практически любой, кто получает образ контейнера, может аутентифицировать себя в службах, для которых действует ключ; он заставляет вас обращаться с образами контейнеров с той же осторожностью, что и с криптографическими ключами и сертификатами!

Следовательно, желательно хранить ключи вне контейнера. Этого легко добиться с помощью Docker VOLUMES; и вы просто монтируете том, содержащий ключи / контейнеры, в контейнер Docker при его запуске.

СОЗДАНИЕ КЛЮЧЕЙ ВНЕ КОНТЕЙНЕРА В следующем файле Docker вместо этого создается ключ после запуска контейнера, и его можно использовать для создания ключа вне файловой системы контейнера.

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.

person eliasw    schedule 16.12.2014
comment
Привет, eliasw, большое спасибо :) - person priyank; 17.12.2014
comment
Привет, eliasw, большое спасибо :) Есть ли способ сгенерировать его вне контейнера, например, в / home dir докера? Я также пытался повторить что-то в / etc / hosts / file из Dockerfile, но безуспешно :(, вы хоть представляете, как этого можно достичь? - person priyank; 17.12.2014
comment
На самом деле это довольно просто: 1) На вашем хост-компьютере запустите ssh-keygen, чтобы создать свои ключи. Например, в / home / docker 2) Используйте -v для монтирования / home / docker в контейнер. См. [Документацию Docker] (docs.docker.com/userguide/dockervolumes/#volume -def) на томах для более точного описания. - person eliasw; 17.12.2014
comment
хорошо, понял, но я хочу сгенерировать ключи ssh вне контейнера на моем хост-компьютере через Dockerfile. Кажется невозможным, придется делать это вручную, запустив ssh-keygen. - person priyank; 18.12.2014
comment
нет, Dockerfile может также создавать ключи вне контейнера. Я добавил второй Dockerfile выше, который помогает. - person eliasw; 19.12.2014
comment
Привет, большое спасибо. он делает фокус именно так, как я хотел :) Большое спасибо !! - person priyank; 22.12.2014
comment
в этом случае ответьте на свой вопрос как решенный :) - person eliasw; 22.12.2014
comment
РЕШЕНО :) действительно очень помогло - person priyank; 23.12.2014
comment
Как сделать так, чтобы он не просил вас перезаписать файл (после того, как он был сгенерирован в первый раз, при запуске контейнера он запрашивает перезапись)? / keys / id_rsa уже существует. Перезаписать (да / нет)? - person Banoona; 05.06.2018
comment
ЗАПУСТИТЕ apt-get update перед тем, как установить openssh. - person NicoKowe; 15.05.2020

Выше ответ почти правильный, но сначала вам нужно 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
person James Drummond    schedule 04.08.2016