Pull to refresh

Использование git за прокси с аутентификацией

Достаточно часто я оказываютсь в ситуации, когда нужно обратиться к git-репозитарию, находясь за корпоративным файерволом, да еще и с аутентифицирующим прокси.
Бинарный протокол git закрыт наглухо, но, теоретически, есть возможность работать через http. Теоретически, потому что если прокси требует аутентификации — то git полностью отказывается с ним работать, по крайней мере под Windows.
Выход — пустить git через локальный прокси, который будет аутентифицироваться на upstream сам. Для этих целей будем использовать небезызвестный privoxy.


В примере используется допущение, что вы хотите получить доступ к github.com. Доступ будет настроен только к нему, ни к чему больше.
Еще одно допущение — ваш прокси поддерживает базовую (Basic) аутентификацию по http протоколу. Если же включена только NTLM аутентификация, то вместо privoxy потребуется установка cntlm. Этот случай мы не рассматриваем, но там все еще проще.

Шаги:
  1. Ставим себе на машину privoxy. Мой файервол запрещает доступ к privoxy.org, ваш, возможно, тоже. Качаем отсюда
  2. Ставить лучше portable версию, незачем мозолить глаза админам новыми записями в списке установленных программ.
  3. Правим config.txt, добавляем строчку
    forward github.com <корпоративный-прокси>:<порт-прокси>
  4. В config.txt добавляем еще строчку
    debug 8 # Вывод информации о HTTP заголовках
  5. Запускаем браузер, ставим в качестве прокси localhost:8118
  6. Заходим на github.com, авторизуемся на прокси, выходим из браузера
  7. Ищем в логах privoxy строчку вида
    Jun 14 18:05:55.577 000017dc Header: scan: Proxy-Authorization: Basic gzMzAcG06T2lkb387XBsZX3gzMzAc2lkJlZG06T=
    Копируем ваш токен в сухое темное место.
  8. Добавляем в user.action строку:
    {+add-header{Proxy-Authorization: Basic gzMzAcG06T2lkb387XBsZX3gzMzAc2lkJlZG06T=}}
    .github.com


    Естественно, заменяем токен на ваш.
  9. Удаляем из config.txt строку
    debug 8
  10. С прокси все, осталось малое — настроить git.
    git config --global http.proxy http: //localhost:8118/
    Пробел только уберите после http:, пришлось добавить, т.к. парсер в ссылку превращает.


Вот и все, теперь git сможет работать через аутентифицирующий прокси. Правда, только по протоколу http.

В качестве бонуса: вы теперь можете вообще забыть о том, что ваш прокси требует ввода пароля, если везде будете пользоваться локальным прокси, а не корпоративным.
Все, что надо сделать — заменить в user.action строку ".github.com" на "/".

Приятных вам коммитов!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.