Werf необходим ssh-ключ пользователя в следующих случаях:

  1. Клонирование удаленного git-репозитория, указанного в файле конфигурации werf.yaml.
  2. Инструкции сборки образа требуют доступа к внешним данным по ssh.

По умолчанию (без указания каких-либо параметров) werf пытается использовать ssh-agent запущенный в системе, проверяя его доступность с помощью переменной окружения SSH_AUTH_SOCK.

В случае отсутствия в системе запущенного ssh-агента, werf пытается выступать в качестве ssh-клиента, для чего использует ssh-ключ пользователя по умолчанию, т.е. (~/.ssh/id_rsa|id_dsa). Если werf обнаруживает один из этих файлов, то выполняется запуск временного ssh-агента с добавлением найденных ключей.

Для использования только конкретных ssh-ключей, необходимо указывать опцию запуска --ssh-key PRIVATE_KEY_FILE_PATH (может быть указана несколько раз, для указания нескольких ssh-ключей). В этом случае werf выполняет запуск временного ssh-агента и добавляет ему только указанные ssh-ключи.

Как werf работает с ssh-агентом

При работе с удаленными git-репозиториями используется UNIX-сокет SSH_AUTH_SOCK, который монтируется во все сборочные контейнеры. Таким образом, сборочные инструкции могут использовать ssh-агент через указанный UNIX-сокет.

ЗАМЕЧАНИЕ Существует ограничение, из-за которого только пользователь root внутри сборочного контейнера имеет доступ к UNIX-сокету из переменной окружения SSH_AUTH_SOCK.

Временный ssh-агент

werf может запускать временный ssh-агент для работы некоторых команд. Такой ssh-агент завершает работу при завершении работы соответствующей команды werf. В случае если в системе есть запущенный ssh-агент, то запускаемый werf временный ssh-агент не конфликтует с запущенным в системе ssh-агентом.