SSH/SFTP 反向代理

SSH/SFTP 反向代理

我有两台机器可以在互联网上访问,无需 NAT。两台机器都运行 SSH 服务。

我想通过 SSH/SFTP 连接到服务器 A 的端口 2000,并且此连接应路由到服务器 B 的端口 22(行为类似于 HTTP 反向代理,但使用 SSH/SFTP 而不是 HTTP)

在此处输入图片描述

答案1

您可以使用 ssh 端口转发来实现此目的

ssh -L localportinmypc:hostname_of_the_behind_the_firewall:remoteport hostname_of_my_firewall

然后连接到本地隧道端口:

sftp -o Port=localportinmyp localhost

或者

ssh -p localportinmyp 

答案2

这对于 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

答案3

就像是:

ssh -o ProxyCommand="ssh -e none userA@serverA:2000 nc -w 1 serverB 22" userB@ServerB

你连接到的地方服务器A使用 ssh 登录用户A用于打开向前连接到服务器B您登录时使用的用户B

解释:

代理命令打开 ssh 连接服务器A(带有用户名)用户A)并启动与端口 22 的双向连接服务器B

初始ssh命令使用此命令ProxyCommand建立双向连接服务器B你必须登录用户B

总之:

从笔记本电脑到服务器 A 有一条加密连接(图中步骤 1),并且

另一个从 Laptop 到 ServerB 的加密连接(步骤 1 + 步骤 2),封装在其第一部分(步骤 1)中的第一个连接中,然后nc在第二部分(步骤 2)中进行绑定。

与 HTTP 不同,它SSH是双向的,当连接打开时,所有请求和响应都遵循相同的连接。因此无需考虑步骤 3 和 4。

相关内容