我有两台可以在互联网上访问的机器,没有涉及NAT。 两台机器都运行SSH服务。
我想在端口2000上通过SSH / SFTP连接到服务器A,并将此连接路由到服务器B端口22(类似HTTP反向代理的行为,但使用SSH / SFTP而不是HTTP)

您可以使用ssh端口转发进行归档
ssh -L localportinmypc:hostname_of_the_behind_the_firewall:remoteport hostname_of_my_firewall
在此之后:
sftp -o Port=localportinmyp localhost or ssh -p localportinmyp
这应该是没有问题的iptables:
#!/bin/bash export IP="1.2.3.4" echo 1 > /proc/sys/net/ipv4/ip_forward iptables \-t nat \-A POSTROUTING \-o eth0 \-d $IP \-j MASQUERADE iptables \-A PREROUTING \-t nat \-p tcp \--dport 2000 \-j DNAT \--to $IP:22
就像是:
ssh -o ProxyCommand="ssh -e none userA@serverA:2000 nc -w 1 serverB 22" userB@ServerB
在那里你连接到serverA与SSHlogin用户A打开一个转发连接到服务器B,让你用userBlogin。
说明:
proxy命令打开一个到ServerA的ssh连接(用户名userA ),并启动到serverB的 22端口的双向连接。
最初的ssh命令使用这个ProxyCommandbuild立到ServerB的双向连接,你必须用ProxyCommandlogin。
罚款:
从笔记本电脑到ServerA有一个encryption的连接(图中的第一步)
另一个从Laptop到ServerB的encryption连接(步骤1 +步骤2),在第一部分(步骤1)中封装在第一连接中,而在第二部分(步骤2)中由nc绑定。
由于SSH是双向的,因此当连接打开时,所有的请求和回答都遵循相同的连接。 所以没有必要考虑你的步骤3和步骤4。