MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Как сделать подключение к репозитарию Git через Socks Proxy в условиях отсутствия DNS
25.08.2017
14:39
Автор: xintrea
Текстовые метки: git, github, socks, socks5, proxy, прокси, linux, windows
Раздел: Компьютер - Программирование - Системы контроля версий (VCS) - Git

В сети есть обсуждение такого нерешенного вопроса:


Работа Git (например с GitHub) через SOCKS5 Proxy в условиях отсутствия DNS


Кратко, проблема вот в чем:


Нахожусь в корпоративной сети. Имею доступ как пользователь к линуховому серверу, у которого есть выход в интернет. Захожу на этот сервер по SSH через Putty.

На рабочем месте Windows 7. Для серфинга включаю Putty, которая делает туннель и поднимает локально на машине порт SOCKS5 Proxy. Запускаю FireFox, у которого настроено использование SOCKS5 Proxy, и стоит галочка «Удаленный DNS» (в других браузерах, кстати, такой настройки не предусмотрено, поэтому они не подходят). И интернет в FireFox работает.

Теперь мне нужно начать работать с git. В git есть глобальные настройки:

> git config --list

http.proxy='socks5://127.0.0.1:9999'

https.proxy='socks5://127.0.0.1:9999'

socks.proxy=127.0.0.1:9999

socks5.proxy=127.0.0.1:9999


Однако при попытке запушить изменения, получаю ошибку:

> git push

ssh: github.com: no address associated with name

fatal: Could not read from remote repository.


Please make sure you have the correct access rights

and the repository exists.


Похоже, что ошибка эта из-за того, что git не умеет резолвить DNS-имена через SOCKS5 Proxy, а просто пользуется тем что есть в системе. А может быть, нужна какая-то дополнительная настройка.


В ответ на этот вопрос было предложено решение: прописать IP адрес github.com в файл windows\system32\drivers\etc\hosts. Проблема в том, что это решение не помогает, потому что вопрос оказался куда сложнее.


Перед дальнейшим обсуждением, подведу краткий итог. Для организации доступа Git в Интернет надо:


1. Иметь запущенным Putty с проброшенным SOCKS5 туннелем (опция -D):


putty.exe -load funnyLinuxHost -D 9999 10.159.168.48


2. В конфиге Git (в каталоге пользователя есть файл .gitconfig) иметь, как минимум, опцию:


[http]

proxy = socks5://127.0.0.1:9999


3. В файле hosts иметь интернетовый IP-адрес для доменного имени github.com


А что нужно еще, написано дальше.


Долгие попытки настройки показали, что обращение к socks-прокси возможно только при использовании http/https протокола. Git не работает через socks5-прокси, если адрес репозитария прописан по протоколу git, например git@github.com:xintrea/monitoring-sp.git. Обнаружить эту особенность в документации мне не удалось (может быть плохо читал), но по факту это так.


Если поменять в настройках репозитария адрес сервера на протокол https (например на https://github.com/xintrea/monitoring-sp.git), то Git начинает соединяться с github. (Настройки репозитария проще всего поменять в файле ./git/config, опция url). Казалось бы, проблема решена. Но нет, тут вступает в дело политика самого GitHub.com.


Дело в том, что соединение на внесение изменений в репозитарий (например git push) на сервисе GitHub.com допустимо как про протоколу git, так и по протоколу https. Но есть нюанс: по протоколу git возможна авторизация по SSH ключу, а по протоколу https такая авторизация почему-то запрещена, даже если все ключи установлены. Поэтому при использовании репозитария по протоколу https, Git будет всегда запрашивать логин и пароль.


Теперь возникает вопрос: как комфортно работать с удаленным репозитарием по протоколу https, чтобы все время не вводить логин-пароль на каждую операцию. Оказывается, этот вопрос не так уж и прост. Например, можно попытаться воспользоваться кешированием пароля:


Caching your GitHub password in Git


Но и тут проблема: кеширование пароля (в среде Windows) работает только в нативном Git-шелле Git for Windows. А если пользоваться обычным cmd, то в нем такой возможности нет. Опять же об удобстве использования в нативном окружении Windows не может быть и речи.


Таким образом, для решения данного вопроса придется идти на крайние меры: прописать логин и пароль прямо в https-линк репозитария. Вот так:


[remote "origin"]

url = https://пользователь:пароль@github.com/xintrea/monitoring-sp.git


Да, это не секьюрно, но другого варианта нормальной работы через socks5-proxy в Windows просто нет.



Так же в этом разделе:
 
MyTetra Share v.0.44
Яндекс индекс цитирования