Как правильно настроить приватный ключ для gitlab runner

Я хотел бы сделать этот сценарий возможным (некоторые аспекты, не связанные с проблемой, были упрощены для лучшего понимания)

Представьте, что у нас есть простой репозиторий gitlab всего с двумя файлами.

  • - хранит статическую веб-страницу
  • - хранит пайплайны для этого репозитория

И у нас есть сервер Debian 11 (с root-доступом, поэтому я могу делать все, что захочу)

Цель почты — создать конвейер gitlab, который будет автоматически подключаться по ssh к этому серверу и выполнять обновление (переход в нужную папку и извлечение master ) после слияния master , чтобы в него попадало каждое изменение.

Я нашел множество источников, которые приводят к созданию ssh-ключа и сохранению закрытого ключа в переменной gitlab (и доступу к нему из конвейера).

Трубопроводы всегда выглядят так:

      stages:
  - deploy

deploy:
  image: ubuntu:latest
  stage: deploy
  only: 
    - main
  before_script:
    - apt-get -yq update
    - apt-get -yqq install ssh
    - install -m 600 -D /dev/null ~/.ssh/id_rsa
    - echo "$SSH_PRIVATE_KEY" | base64 -d > ~/.ssh/id_rsa
    - ssh-keyscan -H $SSH_HOST > ~/.ssh/known_hosts
  script:
    - ssh $SSH_USER@$SSH_HOST "cd $WORK_DIR && git checkout $MAIN_BRANCH && git pull && exit"
  after_script:
    - rm -rf ~/.ssh

Пример источника 1 Пример источника 2

Это подводит меня к первому вопросу: есть ли какое-нибудь лучшее решение, которое могло бы обойти работу с закрытым ключом? Мой страх связан с безопасностью. Я понимаю, что риск взлома gitlab и кражи всех частных переменных невелик, но я хочу попросить любое возможное решение, которое было бы более безопасным. Существует даже возможность выполнить это через контейнеры Docker, если это поможет (но, насколько я понимаю, на стороне сервера существует только разница между выполнением команд git и команд Docker, что не очень помогает в этом аспекте)

И если ответ на первый вопрос отрицательный , я хотел бы задать еще один вопрос: как лучше всего защитить эту пару ключей ssh? Можно ли сгенерировать ssh-ключ только для пользователя, который имеет разрешение только для одной папки (где хранится содержимое этого репозитория) и имеет разрешение только для определенных команд (например, Scanrio, где он будет автоматически перенаправлен в эту папку после входа в систему и имеет только разрешение на выполнениеи ничего больше? Итак, самый большой ущерб, который кто-либо может нанести с помощью этого закрытого ключа, — это получение новейшей версии репозитория?

0 ответов

Другие вопросы по тегам