К содержимому

Прокси для Git: http.proxy, SOCKS5 и SSH-репозитории

Как заставить Git ходить через прокси: одна команда для HTTPS-репозиториев, свой прокси для одного хоста, SOCKS5, как снова отключить, SSH-репозитории и как убедиться, что всё работает.

Что прокси меняет и чего не меняет

Прокси меняет только сетевой путь от вашего компьютера до сервера Git. Правила сервиса, где вы держите репозитории, и то, кто и где может им пользоваться, остаются прежними. Сам Git работает с любым обычным HTTP- или SOCKS5-прокси, который просто пересылает трафик.

Два вида адресов — две настройки

Remote — это адрес, с которым общается Git; посмотреть свои можно командой git remote -v. Если адрес начинается с https:// (или http://), Git работает через библиотеку curl, и настройка http.proxy действует. Если он начинается с git@ или ssh://, Git передаёт соединение программе ssh, а http.proxy игнорируется; этот случай разобран в разделе про SSH ниже. Если не уверены, проще всего перейти на адрес с https://.

Один прокси для всех HTTPS-репозиториев

В документации git-config http.proxy описан как замена прокси, который обычно задают переменными окружения http_proxy, https_proxy и all_proxy. Это единственный нужный ключ, он работает и для адресов https://. Формат значения: [протокол://][пользователь[:пароль]@]хост[:порт]. Вторая команда в примере выводит значение обратно — так проще всего увидеть, что сейчас задано.

Один прокси для всех HTTPS-репозиториев: пример

git config --global http.proxy http://USERNAME:PASSWORD@HOST:PORT
git config --global --get http.proxy

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

Логин и пароль

Если в логине или пароле есть спецсимволы, закодируйте их в адресе через процентное кодирование: @ — %40, : — %3A, / — %2F, # — %23, % — %25. Надёжнее скопировать значения из «Мои активы», чем набирать вручную. Документация git-config допускает также логин без пароля, например http://USERNAME@HOST:PORT: тогда Git запросит пароль так же, как для других учётных данных, и в файле он не хранится. Учтите, что git config --global записывает всё в ~/.gitconfig открытым текстом, и пароль в адресе увидит любой, кто может прочитать этот файл.

Другой прокси (или никакого) для одного хоста

Любую опцию http.* можно применить только к определённым адресам, указав адрес в имени ключа: http.<адрес>.proxy. Протокол и хост должны точно совпадать с адресом репозитория, побеждает более длинное совпадение. Это удобно, когда прокси нужен только для GitHub, а корпоративный Git-сервер должен открываться напрямую. Пустая строка в remote.<имя>.proxy отключает прокси для одного конкретного репозитория — это прямо сказано в документации git-config; что делает пустое http.<адрес>.proxy, там не сказано, поэтому для отключения прокси у одного remote используйте запись remote.<имя>.proxy.

Другой прокси для одного хоста: пример

git config --global http.https://github.com/.proxy http://USERNAME:PASSWORD@HOST:PORT
git config remote.origin.proxy ""

Первая строка задаёт прокси только для github.com. Вторая отключает его для remote с именем origin в текущем репозитории.

Попробовать для одной команды

Чтобы проверить прокси, ничего не сохраняя, передайте настройку на один запуск через git -c. ~/.gitconfig не меняется, пароль не попадает в файл настроек (пока команда выполняется, он виден в командной строке).

Попробовать для одной команды: пример

git -c http.proxy=http://USERNAME:PASSWORD@HOST:PORT clone https://github.com/git/git.git

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

SOCKS5 и socks5h

Git передаёт строку прокси в curl, а документация Git отсылает к синтаксису, который понимает curl. В документации curl перечислены socks5:// и socks5h://; при socks5h:// имя сайта разрешает прокси, а не ваш компьютер. Если нет причин делать иначе, используйте socks5h://. Сама страница Git схемы не перечисляет, поэтому убедитесь проверкой ниже, что это работает в вашей версии Git.

SOCKS5 и socks5h: пример

git config --global http.proxy socks5h://USERNAME:PASSWORD@HOST:PORT

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

Как отключить прокси

Удалите ключ через --unset. Если один и тот же ключ задан в нескольких местах, используйте --unset-all, а затем выполните git config --global --list и убедитесь, что строки с http.proxy не осталось. Как сказано в документации git-config, читаются и переменные окружения http_proxy, https_proxy и all_proxy, поэтому, если прокси возвращается сам, сбросьте их и в терминале.

Как отключить прокси: пример

git config --global --unset http.proxy
git config --global --unset-all http.https://github.com/.proxy

После этого выполните git config --global --list, чтобы увидеть, что осталось.

SSH-репозитории (git@... и ssh://...)

Для SSH-репозиториев http.proxy ничего не делает: Git запускает ssh, и соединение устанавливает ssh. В ssh нужен ProxyCommand — команда, которая открывает для ssh соединение с сервером; %h означает удалённый хост, %p — удалённый порт, это описано в руководстве ssh_config. В примере самого руководства используется nc с -X connect для HTTP-прокси. ProxyJump её не заменяет: он описан только для перехода через другой SSH-хост, а не через SOCKS- или HTTP-прокси.

Для прокси с логином и паролем нужна программа, умеющая их передавать. В руководстве OpenBSD nc сказано, что аутентификация на прокси поддерживается только для HTTP CONNECT, описан параметр для имени пользователя, но не для пароля — для SOCKS5-прокси с логином он не подходит. У инструмента Ncat из проекта Nmap есть --proxy-type socks5 и --proxy-auth USERNAME:PASSWORD, именно для такого случая. Сначала установите Ncat (он идёт вместе с Nmap). Первый пример ниже — запись для ssh_config; второй передаёт тот же ProxyCommand на один запуск через GIT_SSH_COMMAND, который, по документации Git, выполняется оболочкой.

На странице Ncat нет примера с ProxyCommand, поэтому проверьте его проверкой ниже. Помните и о том, что некоторые прокси пропускают только веб-порты и отказывают в соединении с портом 22; если соединение сразу закрывается, переключите адрес репозитория на https://.

SSH-репозитории: пример для ssh_config

# ~/.ssh/config
Host github.com
  ProxyCommand ncat --proxy HOST:PORT --proxy-type socks5 --proxy-auth USERNAME:PASSWORD %h %p

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

SSH-репозитории: один запуск через GIT_SSH_COMMAND

GIT_SSH_COMMAND='ssh -o "ProxyCommand=ncat --proxy HOST:PORT --proxy-type socks5 --proxy-auth USERNAME:PASSWORD %h %p"' git ls-remote [email protected]:git/git.git HEAD

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

Как проверить, что Git использует прокси

  1. Выведите текущую настройку

    Выполните git config --show-origin --get-all http.proxy. Команда покажет значение и файл, откуда оно взято, — так находят забытую настройку.

  2. Запустите небольшую команду с трассировкой

    git ls-remote запрашивает у сервера список веток и ничего не скачивает. С GIT_TRACE_CURL=1 первые строки покажут, к какому хосту и порту подключается Git: это должен быть ваш прокси, а не сервер Git.

  3. Проверьте адрес выхода через curl

    Вторая команда в примере ниже покажет IP, страну и сеть, которые видят сайты через тот же прокси. Поля разобраны в руководстве о проверке IP, страны и провайдера прокси.

  4. Затем клонируйте что-нибудь по-настоящему

    С включённым прокси клонируйте небольшой репозиторий, к которому у вас есть доступ. Если всё получилось, а трассировка ведёт к хосту прокси, готово.

Как проверить, что Git использует прокси: пример

GIT_TRACE_CURL=1 git ls-remote https://github.com/git/git.git HEAD
curl -x http://USERNAME:PASSWORD@HOST:PORT https://ipinfo.io/json

Замените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».

Частые ошибки

• Proxy CONNECT aborted или 407 Proxy Authentication Required. Прокси отклонил логин или пароль. Скопируйте их заново и проверьте процентное кодирование.

• Could not resolve proxy или Failed to connect. Неверные HOST или PORT, либо срок аренды закончился. Проверьте тот же адрес командой curl выше.

• Через curl прокси работает, а Git зависает. Проверьте git config --show-origin --get-all http.proxy на забытое значение.

• При клонировании по ssh прокси игнорируется. Так и должно быть: задайте ProxyCommand, как показано выше, или используйте адрес https://.

• Соединение по ssh сразу закрывается. Возможно, прокси не пропускает порт 22; используйте репозиторий с https://.

Как это сделать с Proxy302

Для любой команды здесь нужны только хост, порт, логин и пароль прокси Proxy302. Трафик ротационных резидентных прокси оплачивается за ГБ, страна выхода задаётся при создании прокси; HTTP — порт 2222, SOCKS5 — порт 3333 на proxy.proxy302.com. Статический ISP IP фиксирован на весь срок аренды и не ротируется — удобно, если инструмент должен всегда выходить с одного адреса. HTTP или SOCKS5 выбирают при покупке, один IP работает с одним протоколом.

Как это сделать с Proxy302: шаги

  1. Шаг 1

    Откройте страницу ротационных резидентных прокси, выберите линию, оставьте протокол HTTP (или выберите SOCKS5) и нажмите «Проверить цену и создать».

  2. Шаг 2

    Откройте «Мои активы» (раздел консоли со всем, что вы купили) и скопируйте HOST, PORT, USERNAME и PASSWORD. На странице «Подключение» есть готовый пример с вашими данными.

  3. Шаг 3

    Подставьте значения в команды выше.

  4. Шаг 4

    Подтвердите выход запросом к https://ipinfo.io/json через прокси.

  5. Шаг 5

    Из материкового Китая сначала запустите вспомогательную программу на странице «Подключение» и держите её открытой, пока работает прокси.

Цены и ограничения

Бюджетная линия стоит $1,50 за ГБ, $1,35 за ГБ в пакете 100 ГБ и $1,20 за ГБ при 300 ГБ. Статический ISP IP — $0,50 за один день и $7,99 за 30 дней. Бесплатного пробного периода нет, минимальная покупка — 1 ГБ или один IP на один день. Набор доступных локаций меняется ежедневно.

Вопросы и ответы

Есть ли git config https.proxy?

В документации git-config описан http.proxy: он заменяет прокси, который обычно задают переменными http_proxy, https_proxy и all_proxy, и именно этот ключ используют для репозиториев с https://.

Почему при клонировании через [email protected] прокси игнорируется?

SSH-репозитории обрабатывает ssh, а не curl. Задайте ProxyCommand в ~/.ssh/config или смените адрес репозитория на https://.

Что выбрать для Git, HTTP или SOCKS5?

Для репозиториев с https:// проще HTTP. SOCKS5 с socks5h:// выбирайте, если вы купили именно его или если нужен ssh через ProxyCommand с логином.

Как включить прокси только для одного репозитория?

Выполните команду git config без --global внутри этого репозитория: настройка запишется в его собственный .git/config, а не в ~/.gitconfig.

Ссылки и источники

7
  1. Git docs: git-config (http.proxy, http.<url>.*, remote.<name>.proxy)

    Официальная документация · Проверено:

    Read on 2 November 2026: http.proxy overrides the proxy normally set by the http_proxy, https_proxy and all_proxy variables; it accepts the syntax curl understands plus a user name without a password (Git then asks for the password the way it does for other credentials); the stated syntax is [protocol://][user[:password]@]proxyhost[:port][/path]; remote.<name>.proxy overrides it per remote and an empty string disables proxying for that remote; http.<url>.* options apply to matching URLs, the scheme and host must match.

    The page does not list the proxy schemes (socks5, socks5h) and does not say what an empty http.proxy does. The socks5h scheme comes from the curl documentation below: test it.

  2. Git docs: git (environment variables GIT_TRACE_CURL, GIT_SSH_COMMAND)

    Официальная документация · Проверено:

    Read on 2 November 2026: GIT_TRACE_CURL enables a curl full trace dump of the transport, similar to curl --trace-ascii; GIT_SSH_COMMAND is used instead of ssh for fetch and push, takes precedence over GIT_SSH and is interpreted by the shell.

    The first part of the page (about 100,000 characters) was read; GIT_CURL_VERBOSE was not found there, so this guide uses GIT_TRACE_CURL.

  3. libcurl docs: CURLOPT_PROXY

    Официальная документация · Проверено:

    Read on 2 November 2026: socks5:// is a SOCKS5 proxy; socks5h:// is a SOCKS5 proxy where the proxy resolves the URL hostname; an empty string explicitly disables the proxy even if an environment variable is set; all_proxy is used if no protocol-specific proxy was set.

    Git passes the proxy string to curl; the Git documentation itself only points to curl's syntax.

  4. OpenBSD manual: ssh_config (ProxyCommand, ProxyJump)

    Официальная документация · Проверено:

    Read on 2 November 2026: ProxyCommand specifies the command used to connect to the server and accepts the tokens %h (remote host), %p (remote port), %r and %n; the manual's example is ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p; ProxyJump takes one or more [user@]host[:port] jump hosts and makes an ssh connection through them.

    ProxyJump is described only for ssh hops; the page does not say it can use a SOCKS or HTTP proxy.

  5. OpenBSD manual: nc

    Официальная документация · Проверено:

    Read on 2 November 2026: -X selects the proxy protocol (4, 4A, 5, connect), -x gives the proxy address and port, -P gives a proxy user name, and the manual states that proxy authentication is only supported for HTTP CONNECT proxies at present; no password option is described.

    Other nc builds can differ; this describes the OpenBSD one.

  6. Nmap Ncat guide: proxies

    Официальная документация · Проверено:

    Read on 2 November 2026: ncat --proxy <host>[:<port>] --proxy-type {http|socks4|socks5} <host> [<port>], and --proxy-auth <username>:<password> for HTTP and SOCKS5 proxies.

    The page does not show Ncat inside an SSH ProxyCommand; that use follows from the ssh_config manual and is untested here.

  7. Proxy302 product facts and price list

    Наблюдение за продуктом · Проверено:

    Product facts file of the site (values checked against the console, the backend and the price table on 18-19 October 2026): products, prices in US$ (1 PTC = US$1), lease terms, protocols and ports, countries, quantity limits, no free trial.

Готовы попробовать?

Создайте аккаунт, пополните баланс и выберите ротируемый резидентный, статический ISP или дата-центр IP — настроить его в браузере можно за несколько минут.