Гайд з git · 1 хв читання

git через проксі: HTTP і SOCKS5

git працює з проксі по-різному через HTTPS і через SSH. Розбираємо обидва випадки: http.proxy для HTTPS-ремоутів (зокрема SOCKS5) і ProxyCommand для SSH — з прив'язкою до конкретних хостів, щоб маршрутизувався лише потрібний трафік.

Ремоути по HTTPS і по SSH

Як проксіювати git, залежить винятково від протоколу вашого ремоута. Для ремоутів по HTTPS (адреси на кшталт https://github.com/...) git ходить через libcurl, тому поважає конфіг http.proxy і стандартні змінні оточення http_proxy — а оскільки це libcurl, він приймає SOCKS5-проксі за схемою socks5h:// так само, як curl. Для ремоутів по SSH ([email protected]:...) git у мережу взагалі не лізе — це робить SSH, тож тунель налаштовується через ProxyCommand у файлі конфігурації SSH.

У s4m є обидва ендпоінти: SOCKS5 на порту 1080 і HTTP на 3128, з авторизацією USER:PASS на proxy.s4m.online. Для HTTPS-ремоутів socks5h:// лишає DNS віддаленим; для SSH — ProxyCommand з nc чи ncat проводить SSH-потік крізь SOCKS5. Дивіться сторінку проксі та що таке SOCKS5; та сама ідея з ProxyCommand є й у порівнянні SOCKS5 і HTTP.

git через проксі: HTTPS і SSH

http.proxy для HTTPS-ремоутів (SOCKS5 чи HTTP) плюс ProxyCommand для SSH. Прив'язка до конкретного URL рятує від проксіювання всього підряд. Замініть USER:PASS.

bash
# --- HTTPS remotes: SOCKS5 with remote DNS ---
git config --global http.proxy socks5h://USER:[email protected]:1080
# or the HTTP proxy:
git config --global http.proxy http://USER:[email protected]:3128

# --- Scope the proxy to ONE host only (leave the rest direct) ---
git config --global http.https://github.com/.proxy \
    socks5h://USER:[email protected]:1080

# --- Remove the proxy later ---
git config --global --unset http.proxy

# --- SSH remotes: tunnel git@... through SOCKS5 via ~/.ssh/config ---
cat >> ~/.ssh/config <<'CFG'
Host github.com
  HostName github.com
  User git
  ProxyCommand nc -X 5 -x proxy.s4m.online:1080 %h %p
CFG
# -X 5 = SOCKS5; nc/ncat must be installed.

# --- One-off, no persistent config ---
git -c http.proxy=socks5h://USER:[email protected]:1080 clone https://example.com/repo.git

Як правильно завести git за проксі

Спершу визначте тип ремоута, потім застосуйте відповідний конфіг.

Визначте протокол ремоута

Виконайте git remote -v. Адреса на https:// працює через http.proxy; адреса виду git@host: іде по SSH, і їй потрібен ProxyCommand.

Для HTTPS задайте http.proxy

Беріть git config --global http.proxy зі socks5h://proxy.s4m.online:1080, щоб DNS резолвився віддалено, або HTTP-ендпоінт на 3128. Якщо проксі потрібен лише для одного хоста, прив'яжіть налаштування до конкретного URL.

Для SSH додайте ProxyCommand

У ~/.ssh/config додайте ProxyCommand nc -X 5 -x proxy.s4m.online:1080 %h %p у відповідний блок Host. Якщо nc/ncat не встановлено — поставте.

Перевірте клонуванням

Склонуйте невеликий репозиторій і переконайтеся, що все проходить. Якщо висне — перевірте ще раз ендпоінт і облікові дані та переконайтеся, що налаштували саме той протокол.

Прив'язка до хоста, авторизація і чесність

Ганяти весь трафік git через проксі потрібно рідко. git уміє задавати проксі для окремого URL: http.https://github.com/.proxy діє тільки на цей хост, а інші ремоути лишаються прямими. Так внутрішні дзеркала працюють на повній швидкості, а зовнішній хост іде крізь проксі. Облікові дані живуть просто в URL проксі; якщо в паролі є спецсимволи, закодуйте їх у URL-форматі.

Проксі s4m — це датацентрові SOCKS5- і HTTP-ендпоінти з авторизацією та оплатою за фактичним трафіком: добре лягає на CI-раннери, які тягнуть залежності з-під контрольованого виходу, або на доступ до git-хоста з обмеженої мережі. Вони датацентрові, а не резидентні, і проксі змінює лише мережевий шлях — не ваші облікові дані git і не SSH-ключі. Якщо CI потрібна одна адреса виходу для білого списку, візьміть виділену персональну IP. 407 по HTTPS означає неправильні дані проксі — дивіться гайд про 407. Ендпоінти перевіряйте інструментами й читайте документацію API.

FAQ

Відповіді на питання

Як змусити git ходити через SOCKS5-проксі?

Для HTTPS-ремоутів задайте git config --global http.proxy socks5h://USER:[email protected]:1080 — git працює через libcurl, тому приймає SOCKS5 так само, як curl. Для SSH-ремоутів натомість використайте ProxyCommand у ~/.ssh/config.

Чи діє http.proxy на SSH-ремоути (git@...)?

Ні. http.proxy впливає лише на HTTPS-ремоути. SSH-ремоути проксіюються на рівні SSH через ProxyCommand — наприклад, nc -X 5 -x proxy.s4m.online:1080 %h %p для SOCKS5.

Як пустити через проксі лише один git-хост?

Використайте конфіг для конкретного URL: git config --global http.https://github.com/.proxy . Через проксі піде тільки цей хост, решта ремоутів лишиться прямими.

Як прибрати проксі з git?

Виконайте git config --global --unset http.proxy (і те саме для варіантів під конкретний URL) або, якщо ремоут по SSH, приберіть рядок ProxyCommand із ~/.ssh/config.

Клонуйте з-за проксі

Проксі з авторизацією: SOCKS5 (1080) і HTTP (3128) на proxy.s4m.online — готові до http.proxy і до ProxyCommand у SSH. Оплата за фактичним трафіком, виділена IP для білих списків CI.

Цю сторінку знаходять за запитами

Реальні пошукові фрази, на які відповідає ця сторінка — за посиланнями відкриються матеріали, що розкривають тему глибше.