Я пытаюсь настроить доступ ssh / git через шлюз ssh, но поиск в Google пуст. По сути, я хочу, чтобы любое соединение с моим ssh-шлюзом от пользователя git было перенаправлено на мой ssh-сервер, чтобы я мог удаленно выполнять push и pull. Однако, если какой-либо другой пользователь подключается, я хочу, чтобы он вошел в систему как обычно.
internet--(git)-->gate--(git)--> git-server
internet--(user)-->gate
Любая помощь или совет будут очень благодарны.
Один из способов сделать это на стороне клиента - добавить в ваш .ssh / config следующее:
Host git.life-hack.org
HostName git.life-hack.org
ProxyCommand ssh darkclown@www.life-hack.org nc %h %p
User git
Но я надеялся, что будет способ сделать эту серверную часть.
Я предполагаю, что вы говорите о Linux и OpenSSH. Пожалуйста, сообщите, если это не так.
Я понимаю, что git-server недоступен напрямую из Интернета. Я не думаю, что вы можете делать то, что предлагаете автоматически, просто используя SSH.
Предположим, что шлюз находится на 2.2.2.2 (общедоступный IP), а git-server - на 10.10.10.10 (RFC1918)
В зависимости от того, чего именно вы пытаетесь достичь и каковы ограничения, вы можете:
1) попросите пользователя, подключенного к git-серверу, сначала перенаправить порт:
ssh -N -L2222:10.10.10.10:22 user@2.2.2.2
а затем они могут войти как:
ssh -p2222 git@localhost
2) на шлюзе вы можете перенаправлять соединения, сделанные с 2.2.2.2:2222 на 10.10.10.10:22, чтобы ваш пользователь входил в систему как: ssh -p2222 git@2.2.2.2
Это потребует выполнения нескольких команд на воротах:
# enable forwarding
echo -n 1 > /proc/sys/net/ipv4/ip_forward
# DNAT packets destined for 2.2.2.2:2222 to 10.10.10.10:22
iptables -A PREROUTING -d 2.2.2.2 -p tcp --dport 2222 -j DNAT --to-destination 10.10.10.10:22
# allow responses from 10.10.10.10 to get through
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# allow forwarding connections to 10.10.10.10:22
iptables -A FORWARD -p tcp --dport 22 -d 10.10.10.10 -j ACCEPT
На git-сервере делать нечего.