我试图通过 ssh gate 设置 ssh/git 访问,但谷歌搜索无果。基本上,我希望用户 git 与我的 ssh gate 的任何连接都转发到我的 ssh 服务器,以便我可以远程进行推送和拉取。但是,如果任何其他用户连接,我希望他们像往常一样登录。
internet--(git)-->gate--(git)--> git-server
internet--(user)-->gate
任何帮助或建议都将非常感激。
在客户端执行此操作的一种方法是将以下内容添加到 .ssh/config:
Host git.life-hack.org
HostName git.life-hack.org
ProxyCommand ssh [email protected] nc %h %p
User git
但我希望有一种方法可以在服务器端完成这个任务。
答案1
我假设您说的是 Linux 和 OpenSSH。如果不是,请告知。
我知道 git-server 不能直接从互联网访问。我认为您不能仅使用 SSH 自动完成您建议的操作。
我们假设 gate 位于 2.2.2.2(公网 IP),git-server 位于 10.10.10.10(RFC1918)
根据您到底想要实现什么以及有哪些限制,您可以:
1)让连接到 git-server 的用户首先转发一个端口:
ssh -N -L2222:10.10.10.10:22 [email protected]
然后他们可以以以下身份登录:
ssh -p2222 git@localhost
2)在 gate 上,你可以将与 2.2.2.2:2222 的连接转发到 10.10.10.10:22,这样你的用户就可以以 ssh -p2222 的身份登录[电子邮件保护]
这需要在门上执行一些命令:
# 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-server 上没有什么特别的事情可做。