Подтвердить что ты не робот

Работает ли клон 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? Какая версия?

Спасибо.

4b9b3361

Ответ 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

Вот оно!