The Apple Geek

Об Apple я уже написал всё, что хотел. Теперь — обо всём остальном

Работа с репозиториями git через ssh/SOCKS-прокси

Представим типичную конфигурацию сети, когда рабочие станции не имеют прямого доступа в Интернет. И нужно на одной из этих станций (далее - Host) получить доступ к репозиторию git, находящемся в Интернет, например, на GitHub (забудем на мгновенье, что доступ возможен и через транспорт http).

При попытке сделать clone на Solarized (мне эта подборка цветовых схем очень нравится), получим предсказуемый ответ:

host$ git clone git://github.com/altercation/solarized.git
Initialized empty Git repository in /home/ole/bin/solarized/.git/
github.com[0: 207.97.227.239]: errno=Connection refused
fatal: unable to connect a socket (Connection refused)

Но, к счастью, в сети есть сервер (назову его Gate), у которого есть доступ в Интернет.

На “ущемлённом” компьютере Host убеждаюсь, что установлен Netcat:

host$ nc -h
OpenBSD netcat (Debian patchlevel 1.89-3ubuntu2)

Если нет, то ставлю его (netcat есть практически во всех Unix).

Ubuntu/Debian:

host$ sudo aptitude install netcat-openbsd 

Mac OS X (Homebrew):

host$ brew install netcat

Создаю файл (192.168.1.1 - адрес Gate, подкорректируйте):

host$ mkdir -p ~/bin
host$ vim ~/bin/git-proxy-wrapper.sh
#!/bin/sh
nc -x 192.168.1.1:1080 -X 5 $*

host$ chmod +x ~/bin/git-proxy-wrapper.sh

Выставляю переменную окружения GIT_PROXY_COMMAND (сначала в текущей сессии, а потом можно добавить команду в .bash_profile):

host$ export GIT_PROXY_COMMAND=~/bin/git-proxy-wrapper.sh

Перехожу к Gate. Запускаю ssh в режиме SOCKS-прокси, прохожу аутентификацию (-N - чтобы не входить в shell, -f - перейти в фоновый режим):

gate$ ssh -D 192.168.1.1:1080 -Nf localhost
ole@localhost's password: *******

На Host запускаю клонирование, всё работает:

host$ git clone git://github.com/altercation/solarized.git
Initialized empty Git repository in /home/ole/tmp/solarized/.git/
remote: Counting objects: 1991, done.
remote: Compressing objects: 100% (1288/1288), done.
remote: Total 1991 (delta 656), reused 1909 (delta 583)
Receiving objects: 100% (1991/1991), 33.03 MiB | 4.14 MiB/s, done.
Resolving deltas: 100% (656/656), done.

Доступ получен. Приятно. Описанный метод работает как на Linux, так на Mac.

Comments