Как заставить Git использовать прокси socks через ssh-соединение? - PullRequest
1 голос
/ 05 октября 2019

В Интернете существует множество идентичных решений для определения прокси-туннеля для загрузок git, таких как this one, и все это путем настройки git's https.proxy & http.proxy config. но эти ответы не работают при попытке clone / push / pull и т. д. по протоколу ssh!

Например, путем установки git config --global https.proxy socks5://127.0.0.1:9999 при попытке клонировать git clone git@github.org:user/repo.git он не проходит через определенный туннель sock5!

Я пробовал разные вещи, но ни одна не работала!

Вопрос:

Как настроить git на использованиелокальный прокси socks5 (например, 127.0.0.1:9999), когда он использует ssh соединений?

Ответы [ 2 ]

1 голос
/ 06 октября 2019

После некоторого посещения стольких страниц я наконец-то нашел решение своего вопроса:

# [step 1] create a ssh-proxy
  ssh -D 9999 -qCN user@server.net

# [step 2] make git connect through the ssh-proxy
  # [current script only]
  export GIT_SSH_COMMAND='ssh -o ProxyCommand="connect -S 127.0.0.1:9999 %h %p"'
  # OR [git global setting] 
  git config --global core.sshCommand 'ssh -o ProxyCommand="connect -S 127.0.0.1:9999 %h %p"'
  # OR [one-time only use]
  git clone -c=core.sshCommand 'ssh -o ProxyCommand="connect -S 127.0.0.1:9999 %h %p"' git@github.com:user/repo.git
  # OR [current repository use only]
  git config core.sshCommand 'ssh -o ProxyCommand="connect -S 127.0.0.1:9999 %h %p"'

Чтобы установить connect в Ubuntu:

sudo apt install connect-proxy
1 голос
/ 05 октября 2019

Вам необходимо определить переменную окружения GIT_SSH_COMMAND first

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

ssh -D $port_number $hostname
# or
ssh -D $port_number $username@$hostname

или с использованием прокси-команды nc (или ncat в Windows )

Суть в том, что если ssh работает с прокси-сервером socks5, вы можете определить то же самоесинтаксис в GIT_SSH_COMMAND, и Git будет использовать правильную команду ssh.

Вы также можете проверить его с локальной конфигурацией:

git -c core.sshCommand='ssh -D 9998 user@host.com' git pull
git -c core.sshCommand='ssh -D 9999 127.0.0.1' git pull
...