Skip to content

mavriq/git-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Что это за проект

git-proxy - это проект, позволяющий подставлять токен авторизации в git-запросы

Поднимаемый сервис

Где это можно использовать

Использовать это можно в ситуациях, когда окружению не стоит передавать ssh-ключи и/или токены авторизации по самым разным причинам. К примеру

  • в Dockerfile, поскольку:
    • ключи/токены останутся в истории будущего образа
    • одноразовые токены мешают кешировать промежуточные этапы сборки
  • в окружении, где может выполняться потенциально опасный код, и вы не хотите дискредитировать свои ssh-ключи или gitlab/github-токены (к примеру - при работе с npm)
  • в ci-cd скриптах, где пересекаются два вышеперечисленных условия

Пример использования и что при этом происходит

  1. действия на стороне git-proxy-сервера (можно в рамках docker-контейнера)
    1. Генерируем токены авторизации в github / gitlab / своем корпоративном gitlab
    2. в секретном каталоге ${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
    3. ... и выполняем команду
    ./bin/git-proxy -config ${SECRET_PATH_TO_CONFIG}/config.yaml
  2. действия на стороне, которой совсем не хочится шарить ssh-ключ/токены
    1. в терминале, в котором будем работать с git, выполняем
      export GIT_CONFIG_GLOBAL=${PATH_TO_CONFIG}/.gitconfig
    2. Создаем этот конфиг-файл .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"
      
    3. теперь команда git (и любая другая утилита, использующая git, и понимающая как гит работает с переменными окружения) будет все запросы в github.com / gitlab.com / gitlab.corp.domain заворачивать в https, который, в свою очередь, будет заворачивать в socks5-сервер, поднимаемый утилитой git-proxy
      благодаря настройке sslVerify = false, самоподписные сертификаты не должны будут смутить git
  3. как это обрабатывает git-proxy:
    1. сервис видит, что приходящий запрос соответсвует одному из подходящих правил (смотри блок rules), и заворачивает в обработчик этого запроса
    2. обработчик запроса представляет из себя псевдо- http/https -сервер, реверс-проксирующий запросы в соответсвующий апстрим. при этом:
      • если это https, то можно указать имя tls-сервтификата, который будет подтянут
        ... если для этого сертификата не указана пара ключей (публичный/секретный), то он будет сгенерирован
        ... правила формирования генерации сертификатом (тип ключа, время жизни, хост(ы) и удостоверящие центры) также можно настроить
      • в проксируемый запрос будет добавлен заголовок аутентификации, вычисленный из соответствующего логопаса в upsgream

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published