Назад | Перейти на главную страницу

Подключиться к репозиторию GIT через другой сервер

Текущий сценарий:

Прямо сейчас, чтобы иметь возможность работать с нашим репозиторием git, нам нужно использовать VPN, поскольку сервер репо не имеет общедоступного IP-адреса.

Цель:

Я пытаюсь настроить сервер, у которого есть общедоступный IP-адрес, и разрешить Git-подключения через него к серверу репо (частный IP-адрес).

Это можно легко сделать, используя ProxyCommand в локальных конфигурациях пользователя, но для того, чтобы облегчить жизнь пользователя, я ищу что-то, что не требует специальной настройки со стороны пользователя.

Может кто-нибудь помочь? Спасибо.

Прежде всего, я действительно думаю, что вам следует использовать подход ProxyCommand. В конечном итоге это облегчит жизнь каждому.

При этом, что вы * могли * сделать, так это настроить пользователя git на внешнем узле для передачи команды git на внутренний узел. Прежде всего, для этого нужно добавить что-то подобное в / и т.д. / SSH / sshd_config на внешнем узле.

Match User git
    ForceCommand /usr/local/bin/git_wrapper
    AllowTcpForwarding no
    PermitTTY no

С git_wrapper сценарий выглядит примерно так.

#!/bin/bash

case "$SSH_ORIGINAL_COMMAND" in
    git*)
    ssh -o BatchMode=yes git@internal.host "$SSH_ORIGINAL_COMMAND"
    ;;
    *)
    echo "Git only"
    ;;
esac

Вы должны убедиться, что external.host:~git/.ssh/known_hosts содержит ключ хоста для внутреннего хоста.

Затем есть часть о том, что external.host может войти в систему как git@internal.host. Это можно организовать, разрешив пользователям включить переадресацию агентов, или предоставив git@external.host ключ ssh в git@internal.host: ~ / .ssh / authorized_keys. Ни один из этих вариантов не обходится без последствий для безопасности.

Предупреждение: Обратите внимание, что ограничения на $SSH_ORIGINAL_COMMAND в основном о том, чтобы помешать вашим пользователям случайно сделать больше, чем они должны. Если вы не доверяете своим пользователям запускать произвольные команды ни на external.host, ни на internal.host, не используйте этот подход.

Кстати, я сказал, что считаю, что вам действительно стоит использовать подход ProxyCommand? Либо так, либо настроив какую-то пересылку на сетевом уровне.