Задать вопрос
Viji
@Viji
DevOps Engineer

Как правильно прокинуть ssh agent в докер контейнер?

пытаюсь прокинуть ssh agent в докер image, кот является частью CI/CD pipeline.

Запускаю в пайплайне, в Линуксе
echo "ssh-path=$SSH_AUTH_SOCK"

все работает... возвращает путь
ssh-path=/opt/buildagent/temp/buildTmp/ssh618017239674568317sock

далее перекидываю его в Docker image (своя сборка из alpine) - внизу строки из Dockerfile

FROM alpine:latest
RUN apk -v add --update --no-cache bash openssh-client
RUN eval $(ssh-agent)


делаю docker run со следующей командой
docker run -v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) --env SSH_AUTH_SOCK=$SSH_AUTH_SOCK

пишет следующее
/bin/sh: 1: dirname /opt/buildagent/temp/buildTmp/ssh618017239674568317sock: not found

в контейнере выполняется скрипт - после запуска

if [ $(ps ax | grep [s]sh-agent | wc -l) -gt 0 ] ; then echo "ssh-agent is already running"; fi
ssh_path=$(dirname $SSH_AUTH_SOCK)
echo "SSH AGENT PATH INSIDE DOCKER=$ssh_path"

пишет следующее:

ssh-agent NOT running
Agent pid 11
SSH AGENT PATH INSIDE DOCKER=/opt/buildagent/temp/buildTmp/ssh-XXXXXXAecGBo


попытка дальше вызвать команду типа
git clone git@gitlab-server.company.ru:gitccountname/project_name.git

дает
error: not authorised

при этом вне докер контейнера все нормально работает
  • Вопрос задан
  • 665 просмотров
Подписаться 1 Сложный 3 комментария
Решения вопроса 1
Viji
@Viji Автор вопроса
DevOps Engineer
привет всем, мучился 2 дня, но сделал это - надо было прокинуть два volumes включая /.ssh с read-only

Работает когда запускается от юзера рут, на других не тестировал

export SSH_AUTH_SOCK_DIR=$(dirname $SSH_AUTH_SOCK)
export SSH_DIR=/root/.ssh/
docker run  -v $SSH_DIR:$SSH_DIR:ro -v $SSH_AUTH_SOCK_DIR:$SSH_AUTH_SOCK_DIR  --env SSH_AUTH_SOCK=$SSH_AUTH_SOCK 
--pull image:version
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы