git-proxy
- это проект, позволяющий подставлять токен авторизации в git-запросы
Поднимаемый сервис
Использовать это можно в ситуациях, когда окружению не стоит передавать ssh-ключи и/или токены авторизации по самым разным причинам. К примеру
- в
Dockerfile
, поскольку:- ключи/токены останутся в истории будущего образа
- одноразовые токены мешают кешировать промежуточные этапы сборки
- в окружении, где может выполняться потенциально опасный код, и вы не хотите дискредитировать свои ssh-ключи или gitlab/github-токены (к примеру - при работе с npm)
- в ci-cd скриптах, где пересекаются два вышеперечисленных условия
- действия на стороне git-proxy-сервера (можно в рамках docker-контейнера)
- Генерируем токены авторизации в github / gitlab / своем корпоративном gitlab
- в секретном каталоге
${SECRET_PATH_TO_CONFIG}
создаем конфиг-файлconfig.yaml
с чем-то вродеsocks5: ip: 0.0.0.0 port: 1080 tls: corp.domain: hosts: - gitlab.corp.domain github: hosts: - github.com gitlab: hosts: - gitlab.com proxies: - upstream: https://corpToken:corpSecret@gitlab.corp.domain certificate: corp.domain rules: - gitlab.corp.domain:443 - 10.11.12.13:443 - upstream: https://tokenHUB:secretHUB@github.com certificate: github rules: - github.com:443 - 140.82.121.3:443 - 140.82.121.4:443 - upstream: https://tokenLAB:secretLAB@gitlab.com certificate: gitlab rules: - gitlab.com:443 - 172.65.251.78:443
- ... и выполняем команду
./bin/git-proxy -config ${SECRET_PATH_TO_CONFIG}/config.yaml
- действия на стороне, которой совсем не хочится шарить ssh-ключ/токены
- в терминале, в котором будем работать с git, выполняем
export GIT_CONFIG_GLOBAL=${PATH_TO_CONFIG}/.gitconfig
- Создаем этот конфиг-файл
.gitconfig
со следующим содержимым[url "https://gitlab.com/"] insteadOf = git://gitlab.com/ insteadOf = git@gitlab.com: [url "https://github.com/"] insteadOf = git://github.com/ insteadOf = git@github.com: [url "https://gitlab.corp.domain/"] insteadOf = git://https://gitlab.corp.domain/ insteadOf = git@https://gitlab.corp.domain: [http "https://gitlab.com"] sslVerify = false proxy = "socks5://127.0.0.1:1080" [http "https://github.com"] sslVerify = false proxy = "socks5://127.0.0.1:1080" [http "https://gitlab.corp.domain"] sslVerify = false proxy = "socks5://127.0.0.1:1080"
- теперь команда
git
(и любая другая утилита, использующая git, и понимающая как гит работает с переменными окружения) будет все запросы вgithub.com
/gitlab.com
/gitlab.corp.domain
заворачивать в https, который, в свою очередь, будет заворачивать в socks5-сервер, поднимаемый утилитойgit-proxy
благодаря настройкеsslVerify = false
, самоподписные сертификаты не должны будут смутитьgit
- в терминале, в котором будем работать с git, выполняем
- как это обрабатывает
git-proxy
:- сервис видит, что приходящий запрос соответсвует одному из подходящих правил (смотри блок
rules
), и заворачивает в обработчик этого запроса - обработчик запроса представляет из себя псевдо- http/https -сервер, реверс-проксирующий запросы в соответсвующий апстрим.
при этом:
- если это https, то можно указать имя tls-сервтификата, который будет подтянут
... если для этого сертификата не указана пара ключей (публичный/секретный), то он будет сгенерирован
... правила формирования генерации сертификатом (тип ключа, время жизни, хост(ы) и удостоверящие центры) также можно настроить - в проксируемый запрос будет добавлен заголовок аутентификации, вычисленный из соответствующего логопаса в
upsgream
- если это https, то можно указать имя tls-сервтификата, который будет подтянут
- сервис видит, что приходящий запрос соответсвует одному из подходящих правил (смотри блок