Достаточно часто я оказываютсь в ситуации, когда нужно обратиться к git-репозитарию, находясь за корпоративным файерволом, да еще и с аутентифицирующим прокси.
Бинарный протокол git закрыт наглухо, но, теоретически, есть возможность работать через http. Теоретически, потому что если прокси требует аутентификации — то git полностью отказывается с ним работать, по крайней мере под Windows.
Выход — пустить git через локальный прокси, который будет аутентифицироваться на upstream сам. Для этих целей будем использовать небезызвестный privoxy .
* * *
В примере используется допущение, что вы хотите получить доступ к github.com. Доступ будет настроен только к нему, ни к чему больше.
Еще одно допущение — ваш прокси поддерживает базовую (Basic) аутентификацию по http протоколу. Если же включена только NTLM аутентификация, то вместо privoxy потребуется установка cntlm . Этот случай мы не рассматриваем, но там все еще проще.
Шаги:
- Ставим себе на машину privoxy. Мой файервол запрещает доступ к privoxy.org, ваш, возможно, тоже. Качаем отсюда
- Ставить лучше portable версию, незачем мозолить глаза админам новыми записями в списке установленных программ.
- Правим config.txt, добавляем строчку
forward github.com <корпоративный-прокси>:<порт-прокси>
- В config.txt добавляем еще строчку
debug 8 # Вывод информации о HTTP заголовках
- Запускаем браузер, ставим в качестве прокси localhost:8118
- Заходим на github.com, авторизуемся на прокси, выходим из браузера
- Ищем в логах privoxy строчку вида
Jun 14 18:05:55.577 000017dc Header: scan: Proxy-Authorization: Basic gzMzAcG06T2lkb387XBsZX3gzMzAc2lkJlZG06T=
Копируем ваш токен в сухое темное место.
- Добавляем в user.action строку:
{+add-header{Proxy-Authorization: Basic gzMzAcG06T2lkb387XBsZX3gzMzAc2lkJlZG06T=}}
.github.com
Естественно, заменяем токен на ваш.
- Удаляем из config.txt строку
debug 8
- С прокси все, осталось малое — настроить git.
git config --global http.proxy http: //localhost:8118/
Пробел только уберите после http:, пришлось добавить, т.к. парсер в ссылку превращает.
Вот и все, теперь git сможет работать через аутентифицирующий прокси. Правда, только по протоколу http.
В качестве бонуса: вы теперь можете вообще забыть о том, что ваш прокси требует ввода пароля, если везде будете пользоваться локальным прокси, а не корпоративным.
Все, что надо сделать — заменить в user.action строку ".github.com" на "/".
Приятных вам коммитов!