#git #docker #security #ssh #sshpass
#git #docker #Безопасность #ssh #sshpass
Вопрос:
Проблема звучит элементарно по своей природе, но я не могу найти безопасное и простое решение.
Проблема заключается в следующем: у меня есть проект, и я хочу извлечь зависимости из частных репозиториев git для создания среды выполнения и впоследствии удалить как SSH-ключ, так и SSH-пароль. Я не могу пропустить парольную фразу, поскольку она применяется удаленными репозиториями git.
- Я изо всех сил пытаюсь ввести пароль SSH, поэтому SSH не будет запрашивать пароль
- Я изо всех сил пытаюсь понять, как это сделать безопасно
Вопрос о том, как я могу это сделать, чтобы подход также был безопасным?
Я работаю в 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
местоположение вашего файла)