Клиент GitHub для Windows за прокси

93

Я пытаюсь заставить работать клиент GitHub для Windows. Я нахожусь на корпоративном компьютере Win 7 x64 за корпоративным прокси-сервером и межсетевым экраном. Следя за различными другими сообщениями и экспериментируя с несколькими комбинациями переменных среды и переменных конфигурации, я обнаружил, что единственный способ заставить клонирование и запуск обновлений работать - это использовать переменную среды HTTPS_PROXY, включая мой полный идентификатор пользователя и пароль корпоративного домена.

Это недопустимо с точки зрения безопасности. Есть ли другой способ заставить это работать?

Дополнительные примечания:

Сработало следующее:

  • Добавьте переменную среды, называемую HTTPS_PROXYсо значениемhttp://[domain]\[userid]:[password]@someproxy.mycorp.com:8080

Следующее не помогло:

  • Пропуск идентификатора пользователя и пароля из HTTPS_PROXYпеременной
  • Использование переменной среды с именем HTTP_PROXY(no S)
  • Добавление http.proxyпеременной в глобальный файл конфигурации ( .gitconfig)
  • Добавление https.proxyпеременной в глобальный файл конфигурации

Во всех случаях клиент GitHub по- прежнему не распознает прокси-сервер: содержимое файла TheLog.txt всегда показывает следующее при запуске:

[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Proxy information: (None)
[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Couldn't fetch creds for proxy

За ним следует вывод нескольких неудачных попыток аутентификации прокси-сервера, каждая из которых указывает, что «Учетные данные отсутствуют».

Джошуа Хониг
источник
2
Добавление переменной среды помогло мне, но это неприемлемое решение, так как оно предоставляет мой домен / пароль любому приложению, имеющему доступ к переменным среды.
Фабрицио
jacobbenson.com/?p=302#sthash.DzPYdGUU.dpbs объясняет, что это вызвано тем, что графический интерфейс (который правильно использует прокси-сервер Windows) вызывает msysgit за кулисами для команд git. msysgit использует libcurl для HTTP-запросов, который не использует настройки прокси Windows. В настоящее время ведется работа по исправлению этого в нескольких областях, в том числе с помощью libgit2sharp на github.com/libgit2/libgit2sharp .
Эндрю Хилл

Ответы:

131

Добавьте эти записи в свой файл .gitconfig в каталоге пользователя (перейдите в% USERPROFILE%):

[http]
    proxy = http://<proxy address>:<proxy port>

[https]
    proxy = https://<proxy address>:<proxy port>

И если вы не хотите хранить свой пароль в виде открытого текста, я бы использовал локальный прокси-сервер пересылки, например CNTLM, который позволяет вам направлять весь трафик через него и может хранить хешированные пароли.


В отличие от исходного вопроса, если вам все равно, что ваш пароль в виде обычного текста, добавьте следующее:

[http]
    proxy = http://<username>:<password>@<proxy address>:<proxy port>

[https]
    proxy = https://<username>:<password>@<proxy address>:<proxy port>
Sogger
источник
см. ответ edufinn, если вам нужна авторизация через прокси: proxy = http: // <username>: <password> @ <корпоративный прокси>: <port>
Ян Хоммс
1
@JanHommes Первоначальный вопрос был специально о том, как это сделать, не сохраняя пароль в виде открытого текста
Sogger
@Sogger Если мой пароль содержит символ «@», как мне настроить пароль, спасибо за вашу помощь.
береговая линия,
4
Если вы используете CNTLM, убедитесь, что вы указываете прокси 127.0.0.1вместо localhost, как предлагается. В Windows кажется, что localhost сначала указывает на адрес IPv6, который CNTLM не прослушивает. Таким образом, git будет ждать до истечения времени ожидания (несколько минут) перед переключением на IPv4-адрес.
Ронан Пайшао,
14

Пробовал все вышеперечисленное - и ничего не вышло, единственное, что мне помогло, это CNTLM - http://cntlm.sourceforge.net/ .

Установите его и запустите cntlm -H, затем выполните аутентификацию на корпоративном прокси, отредактируйте файл cntlm.ini с помощью вывода cntlm, перезапустите службу Windows. Обновите .gitconfig:

[https] proxy = localhost:3128
[http] proxy = localhost:3128

Теперь cntlm выполнит всю аутентификацию, и вы сможете использовать GitHub (и Dropbox, кстати) за корпоративным прокси. По крайней мере, до следующей смены пароля :) (чем снова делать cntlm -H)

Антон
источник
2
Если удаленные действия, такие как git clone, fetch или pull, занимают очень много времени, попробуйте переключить .gitconfig на: [https] proxy = 127.0.0.1:3128 [http] proxy = 127.0.0.1:3128
jhamm
какую службу Windows перезапустить?
Мукус 07
@Mukus cntlm - после установки запускается в сервисном режиме, если я правильно помню.
Антон
Я внес изменения, перезапустил его, но он по-прежнему не работает.
Mukus
8

Мне удалось заставить GitHub Shell работать с нашим корпоративным прокси. Я запускаю GitHub Shell и выполняю следующую команду:

export http_proxy=http://<username>:<password>@<corporate proxy>:3128

Мне бы очень хотелось, чтобы GUI тоже работал. Но я не хочу устанавливать глобальную переменную среды Windows, которая содержит мои корпоративные учетные данные.

Как ни странно, клиент GUI GitHub может подключаться к GitHub для аутентификации пользователя, но проблема связана только с клонированием, извлечением и отправкой проектов из GitHub и в него. Похоже, проблема в реализации git. Мне удалось настроить git для работы через наш прокси, не помещая свои учетные данные в глобальные настройки git, и он запрашивал мои учетные данные при выполнении запросов на вытягивание или push. Но это работало только в Git Shell.

Edufinn
источник
Это потому, что, вероятно, GitHub выполняет внутреннюю аутентификацию с помощью некоторого компонента, который извлекает информацию о прокси из ОС, возможно, какого-то решения SingleSignOn, а сам git этого не делает. У меня такая же проблема с SourceTree. Я также обнаружил, что когда git работает, он работает невероятно долго, что делает использование SourceTree невозможным.
Ронан Пайшау,
Вероятно, это связано с тем, что Github пытается использовать порт git, который обычно фильтруется, поскольку его не часто видят ИТ-специалисты. См. Мой ответ для альтернативы.
dragon788 08
7

Если вы используете GitHub для Windows на предприятии, велика вероятность, что вы находитесь за большим плохим корпоративным брандмауэром / прокси. GitHub для Windows еще не имеет параметров прокси в своем графическом интерфейсе для настройки параметров.

Чтобы настроить GitHub для Windows на использование корпоративного прокси-сервера, отредактируйте файл .gitconfig, который обычно находится в C: \ Users \ .gitconfig или C: \ Documents & Settings \ .gitconfig.

Закройте GitHub для Windows; В .gitconfig просто добавьте

[https] proxy = proxy.yourcompany.com:port

Маниваннан
источник
4

Я тоже столкнулся с этой проблемой, и тоже попытался немного покопаться (разобрал клиент).

Фрагмент кода, который генерирует сообщения журнала, которые мы видим, выглядит следующим образом:

private static void LogProxyServerConfiguration()
{
    WebProxy defaultProxy = WebProxy.GetDefaultProxy();
    string str = defaultProxy.Address != (Uri)null ? defaultProxy.Address.ToString() : "(None)";
    StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Proxy information: {0}", str);
    try
    {
        if (defaultProxy.Credentials == null)
        {
            StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Couldn't fetch creds for proxy", new object[0]);
        }
        else
        {
            NetworkCredential credential = defaultProxy.Credentials.GetCredential(GitHubClient.GitHubDotComUri, "Basic");
            StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Proxy is authenticated: {0}", credential != null && !string.IsNullOrWhiteSpace(credential.UserName));
        }
    }
    catch (Exception ex)
    {
        StartupLogger.log.InfoException("Couldn't fetch creds for proxy", ex);
    }
}

Таким образом, этот блок регистрирует только ту информацию о прокси, которая настроена в IE . Сообщение журнала, похоже, не имеет отношения к тому, что мы настроили в файлах конфигурации или переменных окружения.

DustinTheDev
источник
3

я не знаю о вашем брандмауэре, но мой кампус использует прокси

вы используете какой-нибудь git gui? EDIT : только что заметил, что вы используете клиент github для Windows

Я использую tortoisegit, и его очень легко установить прокси. Просто щелкните правой кнопкой мыши в любом месте, tortoisegit> сеть, включите прокси-сервер и установите адрес сервера, имя пользователя и пароль. сделанный

Насколько я помню, tortoisegit также будет работать с github "из коробки".

Bysreg
источник
2

Вот способ установить прокси в github

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>

Здесь, в моем колледже, у нас нет имени пользователя и пароля, поэтому, если наш IP-адрес колледжа - 172.16.10.10, а порт - 8080

git config --global http.proxy http://172.16.10.10:8080
git config --global https.proxy http://172.16.10.10:8080

PS -> Я бы рекомендовал использовать этот метод для установки прокси, поскольку все встанет на свои места, когда вы узнаете далее
Источник

Роятирек
источник
1

Я нашел этот блог полезным. Он описывает прокси ntlmaps . Вероятно, это менее безопасно, но работает плавно. Я не мог заставить cntlm работать.

Аксакал почти наверняка двоичный
источник
1

Для нас решение заключалось в двух разных вещах. Во-первых, как описано в ответе Соггера, вам нужно добавить записи в свой .gitconfigфайл, расположенный в %USERPROFILE%.

[http]
    proxy = http://<proxy address>:<proxy port>

[https]
    proxy = https://<proxy address>:<proxy port>

Во-вторых, (и это было недостающее звено для нас) вам нужно настроить исключение на прокси-сервере, чтобы разрешить неаутентифицированный прокси-трафик для*.github.com

В iPrism это выглядит так: введите описание изображения здесь

Проблема не столько в прокси, сколько в аутентификации . Пропуск требования аутентификации позволяет клонировать необходимое взаимодействие и работать с проектами с помощью настольного клиента GitHub.

Также обратите внимание, что этот подход не требовал хранения учетных данных прокси-сервера в .gitconfigфайле.

AdamsTips
источник