如何通过 SSH 门将 git 用户转发到 gitserver?

Joh*_*han 5 ssh git forwarding

我试图通过 ssh 门设置 ssh/git 访问,但 googleing 已经空了。基本上,我希望将用户 git 到我的 ssh 门的任何连接转发到我的 ssh 服务器,以便我可以远程进行推和拉。但是,如果任何其他用户连接,我希望他们像往常一样登录。

internet--(git)-->gate--(git)--> git-server

internet--(user)-->gate
Run Code Online (Sandbox Code Playgroud)

任何帮助或建议将不胜感激。

在客户端执行此操作的一种方法是将以下内容添加到您的 .ssh/config:

Host git.life-hack.org
    HostName          git.life-hack.org
    ProxyCommand      ssh darkclown@www.life-hack.org nc %h %p
    User              git
Run Code Online (Sandbox Code Playgroud)

但我希望有一种方法可以做到这个服务器端。

Mar*_*ski 1

我假设您正在谈论 Linux 和 OpenSSH。如果情况并非如此,请告知。

据我所知,git 服务器无法直接从互联网访问。我认为您不能仅使用 SSH 自动执行您所建议的操作。

假设 gateway 位于 2.2.2.2(公共 IP),git-server 位于 10.10.10.10 (RFC1918)

根据您想要实现的目标以及限制条件,您可以:

1) 让连接到 git-server 的用户首先转发端口:

ssh -N -L2222:10.10.10.10:22 user@2.2.2.2
Run Code Online (Sandbox Code Playgroud)

然后他们可以登录为:

ssh -p2222 git@localhost
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

git-server 上没有什么具体要做的事情。