2014-12-16 4 views
10

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

В настоящее время я использую следующие в Dockerfile для генерации пары ключей ssh. Но это дает мне ошибку говоря «/ бен/ш SSH-Keygen не найден»

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

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

Спасибо, Яш

+0

Зачем вам нужен ssh? – Robert

+0

Привет, У меня есть веб-приложение, которое использует проверку ключа ssh с главной машины для выполнения любого действия. Вот почему. – priyank

+0

имя инструмента генерации ключей немного вводит в заблуждение. Это часть открытого SSH, вот почему. – eliasw

ответ

17

Проблема заключается в том, что SSH-серийник не доступен в контейнере еще. Это можно легко решить, например, установив пакет 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 при его запуске.

Создание ключей вне контейнера Следующая 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.

+0

Привет, eliasw, Спасибо большое :) – priyank

+0

Привет, eliasw, Большое спасибо :) есть способ, которым я могу создать его за пределами контейнера, например, в/home dir docker?Я также пытался повторить что-то в файле/etc/hosts/file из Dockerfile, но не успел :(, вы знаете, как это можно достичь? – priyank

+0

На самом деле это довольно просто: 1) На вашей главной машине , запустите ssh-keygen, чтобы создать свои ключи. Например, в/home/docker 2) Используйте -v для подключения/home/docker в контейнер. Для точного описания см. Документацию Docker Documentation (https://docs.docker.com/userguide/dockervolumes/#volume-def) в томах. – eliasw

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^