Работает ли клон git через прокси NTLM?
Я пробовал использовать export http_proxy=http://[username]:[pwd]@[proxy]
и git config --global http.proxy http://[username]:[pwd]@[proxy]
.
Я не мог заставить его работать. Похоже, что git использует обычную проверку подлинности:
Initialized empty Git repository in /home/.../.git/
* Couldn't find host github.com in the .netrc file, using defaults
* About to connect() to github.com port 8080 (#0)
* Trying 10.... * Connected to github.com (10....) port 8080 (#0)
* Proxy auth using Basic with user '...'
> GET http://github.com/sunlightlabs/fiftystates.git/info/refs HTTP/1.1
Proxy-Authorization: Basic MD...
User-Agent: git/1.6.1.2
Host: github.com
Pragma: no-cache
Accept: */*
Proxy-Connection: Keep-Alive
< HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to t
he Web Proxy filter is denied. )
< Via: 1.1 ...
< Proxy-Authenticate: Negotiate
< Proxy-Authenticate: Kerberos
< Proxy-Authenticate: NTLM
< Connection: Keep-Alive
< Proxy-Connection: Keep-Alive
< Pragma: no-cache
< Cache-Control: no-cache
< Content-Type: text/html
< Content-Length: 4118
* The requested URL returned error: 407
* Closing connection #0
fatal: http://github.com/sunlightlabs/fiftystates.git/info/refs download error - The requested URL returned error: 407
Поиск Google возвратил смешанные и, вероятно, не обновленные результаты. Где-то в нем говорится, что curl
используется (был?) Под капотом, но его параметры (были?) Связаны с кодом. Например,
curl --proxy-ntlm --proxy ...:8080 google.com
работает, и я хотел бы использовать ту же опцию с git.
Мне нужны некоторые более конкретные ответы здесь: кто-нибудь преуспевает в использовании git через прокси Windows? Какая версия?
Спасибо.
Ответы
Ответ 1
Git поддерживает проверку подлинности NTLM с версии 1.7.10, соответствующая фиксация https://github.com/gitster/git/commit/dd6139971a18e25a5089c0f96dc80e454683ef0b
1.7.10 примечания к выпуску кратко упомянул его как:
* HTTP transport learned to authenticate with a proxy if needed.
Я успешно протестировал его с помощью прокси-сервера на своем рабочем месте, который является NTLM и требует пользователя/пароля, вы можете проверить себя с помощью следующих команд:
git config --global http.proxy http://user:[email protected]:port
git clone http://git.videolan.org/git/bitstream.git
Привет,
Ответ 2
Учетные данные NTLM по умолчанию
Чтобы использовать учетные данные NTLM по умолчанию, укажите пустое имя пользователя и пароль
git config --global http.proxy https://:@proxy:port
Клиент брандмауэра для ISA-сервера
Вместо установки прокси для git, npm и т.д. вы можете использовать клиент межсетевого экрана для ISA Server от Microsoft. После установки:
Start > Autostart > Microsoft Firewall Client Management
Settings tab > Manual specified ISA Server > proxy:port
Web Browser tab > Uncheck "Enable web browser automatic configuration."
Ответ 3
Клонирование работает для меня, но только через HTTP (поскольку наш корпоративный брандмауэр блокирует протоколы ssh/ git):
$ export http_proxy="http://username:[email protected]:port/"
$ git clone http://github.com/sunlightlabs/fiftystates_site.git fifty
Initialized empty Git repository in /home/user/fifty/.git/
got e15f5192b923d8e87abaeb9406d0f4d80403da09
walk e15f5192b923d8e87abaeb9406d0f4d80403da09
got a78b792191f1cf5e961753dcfe05e9c809bdb0ed
got 76e6e86e72a0f998f7663da69ca49c457a302e27
walk 76e6e86e72a0f998f7663da69ca49c457a302e27
got 35b68a3b876fb90e73ba7a7eb51432e825ef2aa3
...
Github предлагает клонирование через git://github.com/...
, но вы должны вручную изменить его на http://github.com/...
.
Изменить: Я использую git версию 1.5.6.3.
Надеюсь, что это поможет!
Ответ 4
AndreaG (в комментарии выше) имеет единственный приемлемый ответ на эту проблему, которую я могу найти. Похоже, что Git просто не будет работать с проксими NTLM, даже если это действительно так, потому что cURL (который он использует внизу) работает очень хорошо. Почему эта проблема не может быть исправлена, я понятия не имею. Это, по-видимому, довольно распространенная проблема.
Решение в полной мере заключается в использовании ntlmaps для работы в качестве прокси-сервера для прокси-сервера. Все, что вам нужно сделать, это загрузить последнюю версию приложения из: http://ntlmaps.sourceforge.net/
Измените конфигурационный файл, чтобы включить сведения об аутентификации и прокси, а затем установите прокси-сервер в качестве нового локального:
git config --global http.proxy http://localhost:5865
Я могу подтвердить, что он работает отлично. Мало того, что вы можете использовать его для любого приложения, которое требует проверки подлинности NTLM, но не обеспечивает полную поддержку NTLM.
Ответ 5
Вы также можете использовать cntlm,
http://cntlm.sourceforge.net/
Решение, подобное ntlmaps, но написанное в чистом C.
Он работает так же, как и ntlmaps, создавая локальный прокси-сервер (127.0.0.1) на порту (по умолчанию 3128) на вашем компьютере. Этот новый локально созданный прокси-сервер не требует никакой аутентификации и, следовательно, может использоваться с любым приложением, поддерживающим HTTP-прокси.
Он также может создать локальный прокси-сервер socks, если он вам нужен.
Основным преимуществом над ntlmaps, написанным на python, является то, что cntlm имеет очень низкое потребление ЦП и ОЗУ, обычно < 2%.
Ответ 6
Я использую ntlmaps и получаю хорошие результаты, получая через прокси windows/NT: http://ntlmaps.sourceforge.net/
Конфигурация git:
git config --global http.proxy http://localhost:5865
Ответ 7
Поскольку это был вопрос, который я продолжал искать в своем поиске, чтобы сделать эту работу, я добавлю здесь свой ответ.
Мне нужно было получить доступ к репозиторию github.com, работающему через прокси-сервер http (s) (который требует проверки подлинности NTLM) в одной сети, и он все еще работает при обычном подключении к Интернету из нашей Mac OS X dev.
Вот как я заработал. Это не будет работать для каждого хостинг-провайдера git, но я публикую его, если это поможет вам понять это. Это также относится только к Mac OS X, но если вы выясните, как выполнить что-то при изменении сети для вашей системы, остальное должно следовать.
Мне пришлось использовать git clone [email protected]:user/repo.git
после настройки доступа ssh как обычно (http://help.github.com/mac-set-up- git/).
Затем мне нужно было настроить локальный прокси-сервер http (s), который обрабатывает аутентификацию NTLM, такую как ntlmaps, cntlm или Authoxy. Я тестировал Authoxy. Я оставлю эту настройку вам, потому что вам нужно будет узнать свои собственные данные прокси.
Вам также понадобится штопор, который просто sudo port install corkscrew
, если у вас MacPorts.
Затем я добавил следующее в ~/.ssh/config
:
Host github.com.disabled
User git
HostName ssh.github.com
Port 443
ProxyCommand /opt/local/bin/corkscrew localhost 6574 %h %p
Где 6574 - это порт TCP, я установил Authoxy для прослушивания.
Теперь я создал script, который пытается найти прокси-сервер http (s) и настраивает настройку ssh в соответствии с тем, что он находит, в /usr/local/bin/locationchanger
:
#!/bin/sh
set -o nounset
set -o errexit
sleep 10 # allow for WiFi to actually connect.
# if we can find the proxy server, then use it.
if ! host proxy.internal.network;
then
echo "Proxy server not found, clearing http(s) proxy";
sed -i '.backup' -E 's/^Host github.com$/Host github.com.disabled/' "$HOME/.ssh/config"
else
echo "Proxy server found, setting http(s) proxy";
sed -i '.backup' -E 's/^Host github.com.disabled$/Host github.com/' "$HOME/.ssh/config"
fi
echo "Done."
Не забывайте chmod +x /usr/local/bin/locationchanger
.
Теперь создайте ~/Library/LaunchAgents/LocationChanger.plist
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>tech.inhelsinki.nl.locationchanger</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/locationchanger</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/SystemConfiguration</string>
</array>
</dict>
</plist>
И затем launchctl load ~/Library/LaunchAgents/LocationChanger.plist
. Это задание запуска запускается всякий раз, когда изменяется сеть. Если он сможет найти ваш прокси-сервер вашей внутренней сети, то он будет использовать шшш-фильтр ssh для работы через Authoxy, который будет обрабатывать работу через прокси-сервер компании. Если он не может найти прокси-сервер, он отключит специальную конфигурацию ssh, и вы будете работать как обычно.
Теперь нашей команде больше не нужно думать о переключении сети.
Ответ 8
TL/DR:
export GIT_HTTP_PROXY_AUTHMETHOD=basic
или
git config --global http.proxyauthmethod basic
У меня была такая же проблема, когда git (curl) proxy auth не работал. Учетные данные были правильными. Обновление до последнего git -v2.15.0 не помогло.
Проблема была вызвана неправильным методом проверки подлинности прокси, выбранным git -libcurl.
Действительные параметры proxy_authmethod определены в git source:
https://github.com/git/git/blob/d0e9983980a25e0c398cc03342e5ad22ef85b8a8/http.c#L81
proxyauthmethod может быть определен либо через переменную среды GIT_HTTP_PROXY_AUTHMETHOD
или http.proxyauthmethod
git config. Переменная окружения переопределяет значение параметра конфигурации.
Ответ 9
Я наткнулся на более легкое и, возможно, более безопасное решение, которое работает не только для git, но также и с установщиками на основе команд
- Рубигемы в рубине
- npm в node
Одно решение, использующее весь ваш трафик из командной строки, проксируется с помощью аутентификации.
Не указывать свой пароль пользователю: пароль @домен: формат порта
Решение:
Загрузите Fiddler, он имеет встроенный способ добавления заголовков аутентификации ко всем запросам.
После запуска меню Rules- > Automatically Authenticate (Отметьте это)
Тогда для git
git config --global http.proxy http://localhost:8888
git config --global https.proxy http://localhost:8888
Вот оно!