Текущий сценарий:
Прямо сейчас, чтобы иметь возможность работать с нашим репозиторием 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? Либо так, либо настроив какую-то пересылку на сетевом уровне.