В условиях, когда до хоста по каким-либо причинам нет прямого доступа по сети и он доступен только через SOCKS4/SOCKS5/HTTPS-прокси, может быть необходимо получить до него доступ по SSH. Например для использования Git over SSH.
Итак, предположим, у нас есть следующая структура сети:
git.example.org
— сервер, к которому нам нужно получить SSH-доступ10.1.1.1:1080
— SOCKS5-проксиlocalhost
— хост, у которого уже есть доступ доgit.example.org
по HTTP(S) через SOCKS5 и нужен доступ по SSH.
Для реализации поставленной задачи понадобится только утилита netcat
, которая по-моему входит в поставку по-умолчанию для всех дистрибутивов GNU/Linux и может быть отдельно установлена для Windows, а также небольшая правка файла конфигурации ssh
. Необходимо для доступа к хосту git.example.org
выполнить прокси-команду
nc -X 5 -x 10.1.1.1:1080 git.example.org 22
Также подключение можно выполнить через SOCKS4, или HTTPS-прокси, смотрите справочную страницу по netcat
: man 1 nc
.
В ~/.ssh/config
на localhost
это будет выглядеть следующим образом:
Host git.example.org
ProxyCommand /usr/bin/nc -X 5 -x 10.1.1.1:1080 git.example.org 22
Host git.example.org
Проверьте правильность пути до nc
с помощью команды which nc
.
Теперь с этого хоста можно использовать git-репозитории c git.example.org
также, как если бы до него был прямой доступ, т.е.
git clone git@git.example.org:user/repo.git
Напоследок: ProxyCommand /usr/bin/nc -X 5 -x 10.1.1.1:1080 git.example.org 22
можно вынести первой строкой в ~/.ssh/config
и тогда доступ до всех хостов будет осуществляться через указанный прокси-сервер.