Как добавить пароль ssh в Docker и удалить его после его использования?

#git #docker #security #ssh #sshpass

#git #docker #Безопасность #ssh #sshpass

Вопрос:

Проблема звучит элементарно по своей природе, но я не могу найти безопасное и простое решение.

Проблема заключается в следующем: у меня есть проект, и я хочу извлечь зависимости из частных репозиториев git для создания среды выполнения и впоследствии удалить как SSH-ключ, так и SSH-пароль. Я не могу пропустить парольную фразу, поскольку она применяется удаленными репозиториями git.

  1. Я изо всех сил пытаюсь ввести пароль SSH, поэтому SSH не будет запрашивать пароль
  2. Я изо всех сил пытаюсь понять, как это сделать безопасно

Вопрос о том, как я могу это сделать, чтобы подход также был безопасным?

Я работаю в Docker и потенциально могу установить на него любое программное обеспечение с открытым исходным кодом.

Комментарии:

1. Обычно я удаляю парольную фразу, клонирую репозиторий, возвращаю парольную фразу на место. Я думаю, вы ясно дали понять, что ваш пульт принудительно использует парольную фразу, поэтому вы не можете удалить ее и клонировать? Правильно ли я понимаю?

2. Да, это именно проблема. Это принудительно, поэтому я должен преодолеть это. Я также не контролирую политики организации.

3. Я склонен запускать все операции git за пределами пространства Docker. Это позволяет избежать проблемы с получением ключа в образ и возможности его утечки; это позволяет мне создавать произвольную ветвь или рабочий код; и это позволяет избежать проблем, когда Docker не будет повторять RUN git clone строку, считая ее идемпотентной.

4. @DavidMaze В моем случае это не сработало бы, потому что SSH-соединение предназначено для создания зависимостей проекта, которые находятся в Git. Это означало бы, что мне нужно будет создать проект со всеми внешними зависимостями, но собственные среды на локальном компьютере, облако и конвейер CI / CD могут отличаться, поэтому я вообще не буду использовать возможности Docker в этом случае. Это ставит под сомнение использование Docker, и Docker — это не то, что я могу отказаться от этого проекта.

5. Поместите Dockerfile и другие артефакты в сами репозитории. git clone ... amp;amp; docker build . Вы все равно получите согласованные результаты из согласованного исходного дерева.

Ответ №1:

С buildkit включенным:

В сборке docker есть опция —ssh, позволяющая движку Docker пересылать соединения агента SSH.

Вы можете ssh-add использовать свои закрытые ключи для ssh-agent .

Со ssh-add man страниц:

Если для какого-либо файла требуется парольная фраза, ssh-add запрашивает парольную фразу у пользователя.

Со ssh-agent man страниц:

Идея заключается в том, что агент запускается на локальном КОМПЬЮТЕРЕ пользователя, ноутбуке или терминале. Данные аутентификации не должны храниться ни на каком другом компьютере, а парольные фразы аутентификации никогда не передаются по сети. Однако соединение с агентом пересылается через удаленные логины SSH, и таким образом пользователь может безопасно использовать привилегии, предоставляемые идентификаторами, в любом месте сети.

ssh-agent Никогда не будет отправлять закрытый ключ по своему каналу запроса. …

Пример Dockerfile из документа:

 # syntax=docker/dockerfile:experimental
FROM alpine

# Install ssh client and git
RUN apk add --no-cache openssh-client git

# Download public key for github.com
RUN mkdir -p -m 0600 ~/.ssh amp;amp; ssh-keyscan github.com >> ~/.ssh/known_hosts

# Clone private repository
RUN --mount=type=ssh git clone git@github.com:myorg/myproject.git myproject
  

Создайте образ: docker build --ssh default

Комментарии:

1. К ней есть одно примечание, которое в Windows default не работает, поэтому вам нужно указать полный проход default=C:/.ssh/id_rsa (или id_rsa местоположение вашего файла)