Для настройки Git на работу через прокси-сервер необходимо сконфигурировать переменные окружения http_proxy, https_proxy или использовать встроенные настройки Git для http.proxy и https.proxy, а для SSH-соединений — опции ProxyCommand в файле ~/.ssh/config.
Git часто используется в корпоративных средах или сетях, где прямой доступ к внешним ресурсам, таким как GitHub, GitLab или Bitbucket, ограничен файрволами. В таких случаях взаимодействие с удалёнными репозиториями Git, включая операции clone, push и pull, требует настройки прокси-сервера.
Настройка HTTP/HTTPS прокси для Git
Git может использовать прокси-сервер для HTTP и HTTPS-соединений, что актуально для репозиториев, доступных по URL вида http://... или https://.... Существует два основных метода настройки: через конфигурацию Git и через переменные окружения.
Через конфигурацию Git
Этот метод позволяет задать прокси для Git глобально для всех репозиториев пользователя или локально для конкретного репозитория.
Глобальная настройка:
Применяется ко всем репозиториям, с которыми работает текущий пользователь.
git config --global http.proxy http://user:password@proxy.example.com:8080
git config --global https.proxy http://user:password@proxy.example.com:8080
Если прокси-сервер не требует аутентификации, можно опустить user:password@:
git config --global http.proxy http://proxy.example.com:8080
git config --global https.proxy http://proxy.example.com:8080
Для использования SOCKS5 прокси:
git config --global http.proxy socks5://proxy.example.com:1080
git config --global https.proxy socks5://proxy.example.com:1080
Локальная настройка:
Применяется только к текущему репозиторию. Выполняется из корневой директории репозитория.
git config http.proxy http://proxy.example.com:8080
git config https.proxy http://proxy.example.com:8080
Для отмены настройки прокси:
git config --global --unset http.proxy
git config --global --unset https.proxy
или локально:
git config --unset http.proxy
git config --unset https.proxy
Через переменные окружения
Этот метод задаёт прокси для всех приложений, которые используют эти переменные, включая Git. Это полезно, когда прокси требуется для большинства сетевых операций в системе. Переменные окружения обычно задаются в файлах .bashrc, .zshrc или аналогичных для постоянного действия.
Linux/macOS:
export HTTP_PROXY="http://user:password@proxy.example.com:8080"
export HTTPS_PROXY="http://user:password@proxy.example.com:8080"
export ALL_PROXY="socks5://user:password@proxy.example.com:1080" # Для SOCKS
Рекомендуется использовать строчные (http_proxy, https_proxy) и заглавные (HTTP_PROXY, HTTPS_PROXY) версии для максимальной совместимости:
export http_proxy="http://user:password@proxy.example.com:8080"
export https_proxy="http://user:password@proxy.example.com:8080"
export HTTP_PROXY="http://user:password@proxy.example.com:8080"
export HTTPS_PROXY="http://user:password@proxy.example.com:8080"
Для отмены:
unset http_proxy
unset https_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
unset ALL_PROXY
Windows (PowerShell):
$env:http_proxy="http://user:password@proxy.example.com:8080"
$env:https_proxy="http://user:password@proxy.example.com:8080"
# Для постоянной настройки:
[System.Environment]::SetEnvironmentVariable('http_proxy', 'http://user:password@proxy.example.com:8080', 'User')
[System.Environment]::SetEnvironmentVariable('https_proxy', 'http://user:password@proxy.example.com:8080', 'User')
Приоритет настроек
Git сначала проверяет локальные настройки репозитория, затем глобальные настройки пользователя, а затем переменные окружения.
| Метод настройки | Область применения | Приоритет |
|---|---|---|
git config --local |
Конкретный репозиторий | Высокий |
git config --global |
Все репозитории для пользователя | Средний |
Переменные окружения (http_proxy, https_proxy, ALL_PROXY) |
Все приложения в текущей сессии | Низкий |
Настройка SSH прокси для Git
Если Git-репозиторий использует SSH (URL вида git@github.com:user/repo.git), настройка HTTP/HTTPS прокси не будет работать. Для SSH-соединений требуется отдельная конфигурация прокси через файл ~/.ssh/config.
Использование ProxyCommand
ProxyCommand позволяет указать внешнюю команду, которая будет использоваться для установления соединения с удалённым хостом через прокси. Часто используются nc (netcat) или corkscrew.
Создайте или отредактируйте файл ~/.ssh/config:
Host github.com
Hostname github.com
User git
ProxyCommand nc -X connect -x proxy.example.com:8080 %h %p
Здесь:
* Host github.com: Применяется к соединениям с github.com. Можно использовать Host * для всех хостов.
* Hostname github.com: Указывает фактическое имя хоста для подключения.
* User git: Пользователь для SSH-подключения.
* ProxyCommand: Команда для установления соединения через прокси.
* nc -X connect: Указывает netcat использовать HTTP CONNECT прокси.
* -x proxy.example.com:8080: Адрес и порт прокси-сервера.
* %h %p: Заполнители для имени удалённого хоста и порта, которые SSH автоматически подставит.
SOCKS5 прокси с netcat:
Host github.com
Hostname github.com
User git
ProxyCommand nc -X 5 -x proxy.example.com:1080 %h %p
-X 5 указывает на использование SOCKS5.
Использование corkscrew
corkscrew – это утилита, разработанная специально для туннелирования SSH через HTTP-прокси.
Сначала установите corkscrew (например, sudo apt-get install corkscrew в Debian/Ubuntu).
Затем добавьте в ~/.ssh/config:
Host github.com
Hostname github.com
User git
ProxyCommand corkscrew proxy.example.com 8080 %h %p
Если прокси требует аутентификации, создайте файл с учетными данными, например, ~/.ssh/proxyauth:
user:password
И измените ProxyCommand:
Host github.com
Hostname github.com
User git
ProxyCommand corkscrew proxy.example.com 8080 %h %p ~/.ssh/proxyauth
Не забудьте установить правильные права доступа для файла proxyauth: chmod 600 ~/.ssh/proxyauth.
Аутентификация прокси-сервера
Если прокси-сервер требует аутентификации, учетные данные могут быть включены в URL прокси или переданы через переменные окружения.
В URL прокси
git config --global http.proxy http://username:password@proxy.example.com:8080
export HTTP_PROXY="http://username:password@proxy.example.com:8080"
Через переменные окружения
Для некоторых прокси-серверов или утилит может потребоваться установка отдельных переменных для имени пользователя и пароля:
export PROXY_USER="username"
export PROXY_PASSWORD="password"
export HTTP_PROXY="http://${PROXY_USER}:${PROXY_PASSWORD}@proxy.example.com:8080"
Управление сертификатами SSL/TLS
При работе через HTTPS-прокси или в корпоративных сетях часто используются прокси, которые перехватывают и перешифровывают SSL-трафик (SSL inspection). Это может привести к ошибкам проверки SSL-сертификатов Git.
Добавление доверенных сертификатов
Если прокси-сервер использует свой корневой сертификат для SSL inspection, его необходимо добавить в хранилище доверенных сертификатов Git.
- Получите корневой сертификат прокси: Обычно это файл
.crtили.pem, который можно получить у сетевого администратора. -
Укажите Git путь к сертификату:
bash git config --global http.sslCAInfo /path/to/corporate-root-ca.pemИли, если у вас несколько сертификатов, объедините их в один файл.
Отключение проверки SSL (не рекомендуется)
В крайних случаях, если нет возможности добавить корневой сертификат прокси, можно отключить проверку SSL. Это снижает безопасность и не рекомендуется для продуктивных сред.
git config --global http.sslVerify false
Для локального репозитория:
git config http.sslVerify false
Исключения из прокси
Иногда требуется использовать прокси для большинства ресурсов, но обходить его для определенных хостов (например, для внутренних Git-серверов).
no_proxy и Git config
Переменная окружения no_proxy (или NO_PROXY) позволяет указать список хостов, для которых прокси не должен использоваться.
export NO_PROXY="localhost,127.0.0.1,example.local,github.com"
Список может содержать IP-адреса, доменные имена и даже маски подсети. Элементы разделяются запятыми.
Git также позволяет настроить исключения через свои конфигурационные параметры:
git config --global http.proxy http://proxy.example.com:8080
git config --global http.noProxy "localhost,127.0.0.1,example.local"
Git проверит http.noProxy перед использованием http.proxy.
Проверка конфигурации и устранение неполадок
Проверка настроек Git
Просмотреть текущие настройки Git можно следующими командами:
git config --global --list
git config --local --list # Внутри репозитория
Тестирование подключения
Проверьте, работает ли прокси, выполнив операцию git clone или git pull с известным репозиторием.
git clone https://github.com/git/git.git
Если возникают проблемы, можно увеличить уровень детализации Git:
GIT_CURL_VERBOSE=1 git clone https://github.com/git/git.git
Эта команда выведет подробную информацию о HTTP-запросах и ответах, что поможет диагностировать проблемы с прокси или SSL.
Общие проблемы
- Неправильный адрес или порт прокси: Убедитесь, что адрес и порт прокси-сервера указаны корректно.
- Ошибка аутентификации: Проверьте правильность имени пользователя и пароля для прокси.
- Проблемы с SSL-сертификатами: Если Git выдает ошибки SSL, вероятно, требуется добавить корпоративный корневой сертификат или временно отключить проверку SSL (только для отладки).
- Конфликт настроек: Если используются и переменные окружения, и
git config, убедитесь, что приоритеты настроены правильно. - Блокировка файрволом: Убедитесь, что прокси-сервер и ваш компьютер имеют необходимые разрешения для доступа к удалённым Git-серверам.
- Несовместимость
netcat: Некоторые версииnetcatмогут не поддерживать опции-X connectили-X 5. В этом случае рассмотрите использованиеcorkscrewили других утилит для SSH-туннелирования.