Есть ли способ туннелировать команды git через прокси-сервер ssh?

Я хотел бы создать ssh-клиент, который будет отправлять git-команды на ssh-прокси, который будет передавать данные в двунаправленном режиме от клиента к репозиторию git-сервера (например, размещенному на github). Есть простой способ сделать это? Я попробовал следующее: https://www.systutorials.com/git-through-ssh-tunnel-as-proxy/ безуспешно. Надеюсь, это понятно.

Что-то вроде этого, когда клиент отправляет, например, git clone, а сервер SSH возвращает файлы на клиентскую машину.

SSH-клиент ‹---› SSH-сервер ‹---› Github Repo

Любая помощь действительно ценится!


person Solerus    schedule 25.06.2020    source источник
comment
Попробуйте ProxyJump. На стороне клиента настройте ssh для использования сервера в качестве джамп-хоста для GitHub.   -  person phd    schedule 25.06.2020
comment
Что не работает для вас?   -  person chepner    schedule 25.06.2020


Ответы (2)


Решение, которое предлагает «systutorials.com», является правильным, поскольку в нем отсутствует информация о конфигурации. Полная конфигурация:

vi ~/.ssh/config

Host github.com
        HostName github.com
        User git
        Port 22
        ProxyCommand nc -x 127.0.0.1:1080 %h %p
        IdentityFile ~/.ssh/id_rsa
  • «127.0.0.1:1080» — это ваш SSH-сервер, вы можете изменить адрес на свой
  • удачи
person HeartRunner    schedule 25.06.2020
comment
Я получил ошибку nc: invalid option -- 'x' при попытке запустить команду - person Solerus; 26.06.2020
comment
«ProxyCommand nc -proxy 127.0.0.1:1080 %h %p» или «ProxyCommand nc -X 127.0.0.1:1080 %h %p» зависит от вашей версии nc, подробности см. в «man nc». Кстати, убедитесь, что порт (1080) является вашим портом Socks5. - person HeartRunner; 26.06.2020
comment
Спасибо за подсказку пришел к такому же выводу! Есть ли причина, по которой вы говорите о прокси-сервере socks5, когда я упомянул прокси-сервер ssh? - person Solerus; 28.06.2020
comment
Я использовал прокси-сервер http не удалось, предполагая, что брандмауэр останавливает его. Порт Socks5 работает для меня. Удалось ли вам туннелировать команды git через прокси-сервер http? - person HeartRunner; 29.06.2020
comment
Таким образом, в основном промежуточный переход в середине не является прокси-сервером http, хотя он мог бы им быть, а вместо этого является прокси-сервером ssh (как показано на github.com/dutchcoders/sshproxy), работающий на порту 2222; Я могу перенаправить поток на прокси, но пока получаю handshake failed error. Спасибо за вашу помощь! - person Solerus; 29.06.2020

Вот еще одно решение для немного другого варианта использования, а именно:

  • Вы можете получить доступ к github.com с хоста, скажем, foo.
  • На самом деле вам нужно подключиться к нему с другого хоста, скажем, bar.
  • Вам нужно сделать это только в интерактивном режиме, а не из заданий cron или какого-либо другого автоматизированного действия.
  • Однако bar не разрешено устанавливать какие-либо исходящие TCP-соединения — ни напрямую, ни через прокси-хост.
  • Вы можете использовать SSH для подключения с foo к bar.
  • В этом соединении вам разрешено настроить обратный туннель SSH.

В этой ситуации вы можете сделать следующее:

  1. На foo в ~/.ssh/config укажите обратный туннель SSH для хоста bar.
  2. На bar в ~/.ssh/config укажите конечную точку туннеля в качестве прокси для хоста github.com.

Например, с достаточно современными версиями OpenSSH вы можете использовать:

Host bar
  RemoteForward 22022 bar:22

на foo и на bar:

Host github.com
  ProxyJump localhost:22022

Теперь, если все хорошо, после выполнения

slogin bar

на foo вы можете использовать, на bar:

git clone [email protected]:github/gitignore.git

(или любой другой репозиторий, который вы хотите использовать), и это попытается использовать обратный туннель от localhost:22022 до foo для подключения к github.com.

Это работает для меня (на обоих хостах работает Ubuntu 18.04).

Заметки:

  • Должна быть возможность заменить ~/.ssh/config строки в bar чем-то эквивалентным в ~/.gitconfig; например, используя gitProxy или [url (...) .insteadOf (...)]. Мне не удалось сделать эту работу.
  • Чтобы подключиться к github.com по протоколу HTTPS вместо SSH, подключите обратный туннель к порту 443 вместо 22.
  • Это довольно хрупко, так как зависит от специальных битов конфигурации foo и bar, работающих в тандеме. Так что я бы не рекомендовал это, за исключением данного варианта использования, для которого трудно придумать что-то лучше.
person reinierpost    schedule 02.08.2021