Прокси в curl
HTTP- и SOCKS5-прокси в curl: -x, учётные данные, socks5h, переменные окружения, .curlrc и проверка выхода.
Как заставить 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://.
В документации git-config http.proxy описан как замена прокси, который обычно задают переменными окружения http_proxy, https_proxy и all_proxy. Это единственный нужный ключ, он работает и для адресов 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 значениями из «Мои активы».
Git передаёт строку прокси в curl, а документация Git отсылает к синтаксису, который понимает curl. В документации curl перечислены socks5:// и socks5h://; при socks5h:// имя сайта разрешает прокси, а не ваш компьютер. Если нет причин делать иначе, используйте socks5h://. Сама страница Git схемы не перечисляет, поэтому убедитесь проверкой ниже, что это работает в вашей версии Git.
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-репозиториев 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/config
Host github.com
ProxyCommand ncat --proxy HOST:PORT --proxy-type socks5 --proxy-auth USERNAME:PASSWORD %h %pЗамените HOST, PORT, USERNAME и PASSWORD значениями из «Мои активы».
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 config --show-origin --get-all http.proxy. Команда покажет значение и файл, откуда оно взято, — так находят забытую настройку.
git ls-remote запрашивает у сервера список веток и ничего не скачивает. С GIT_TRACE_CURL=1 первые строки покажут, к какому хосту и порту подключается Git: это должен быть ваш прокси, а не сервер Git.
Вторая команда в примере ниже покажет IP, страну и сеть, которые видят сайты через тот же прокси. Поля разобраны в руководстве о проверке IP, страны и провайдера прокси.
С включённым прокси клонируйте небольшой репозиторий, к которому у вас есть доступ. Если всё получилось, а трассировка ведёт к хосту прокси, готово.
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. Трафик ротационных резидентных прокси оплачивается за ГБ, страна выхода задаётся при создании прокси; HTTP — порт 2222, SOCKS5 — порт 3333 на proxy.proxy302.com. Статический ISP IP фиксирован на весь срок аренды и не ротируется — удобно, если инструмент должен всегда выходить с одного адреса. HTTP или SOCKS5 выбирают при покупке, один IP работает с одним протоколом.
Откройте страницу ротационных резидентных прокси, выберите линию, оставьте протокол HTTP (или выберите SOCKS5) и нажмите «Проверить цену и создать».
Откройте «Мои активы» (раздел консоли со всем, что вы купили) и скопируйте HOST, PORT, USERNAME и PASSWORD. На странице «Подключение» есть готовый пример с вашими данными.
Подставьте значения в команды выше.
Подтвердите выход запросом к https://ipinfo.io/json через прокси.
Из материкового Китая сначала запустите вспомогательную программу на странице «Подключение» и держите её открытой, пока работает прокси.
Бюджетная линия стоит $1,50 за ГБ, $1,35 за ГБ в пакете 100 ГБ и $1,20 за ГБ при 300 ГБ. Статический ISP IP — $0,50 за один день и $7,99 за 30 дней. Бесплатного пробного периода нет, минимальная покупка — 1 ГБ или один IP на один день. Набор доступных локаций меняется ежедневно.
В документации git-config описан http.proxy: он заменяет прокси, который обычно задают переменными http_proxy, https_proxy и all_proxy, и именно этот ключ используют для репозиториев с https://.
SSH-репозитории обрабатывает ssh, а не curl. Задайте ProxyCommand в ~/.ssh/config или смените адрес репозитория на https://.
Для репозиториев с https:// проще HTTP. SOCKS5 с socks5h:// выбирайте, если вы купили именно его или если нужен ssh через ProxyCommand с логином.
Выполните команду git config без --global внутри этого репозитория: настройка запишется в его собственный .git/config, а не в ~/.gitconfig.
Официальная документация · Проверено:
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.
Официальная документация · Проверено:
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.
Официальная документация · Проверено:
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.
Официальная документация · Проверено:
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.
Официальная документация · Проверено:
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.
Официальная документация · Проверено:
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.
Наблюдение за продуктом · Проверено:
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 — настроить его в браузере можно за несколько минут.