Перейти к содержимому
Гайды 5 мин чтения 2 просмотров

Настройка прокси для Git

Настройка прокси для Git: clone, push, pull через прокси

Для настройки 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.

  1. Получите корневой сертификат прокси: Обычно это файл .crt или .pem, который можно получить у сетевого администратора.
  2. Укажите 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-туннелирования.
Обновлено: 04.03.2026
Назад к категории

Попробуйте наши прокси

20,000+ прокси в 100+ странах мира