如何将 SSH 从一台服务器直接转发到另一台服务器?

如何将 SSH 从一台服务器直接转发到另一台服务器?

我有位于 xxxx 和 yyyy 的服务器,我想“假装”服务器 yyyy 是服务器 xxxx

我希望能够简单地输入命令ssh y.y.y.y并能够在 xxxx 服务器内部进行探索,我不想添加任何额外的参数来ssh暗示我甚至知道 xxxx 的存在。

我该如何设置此转发?

我的服务器是 Ubuntu 16.04 Amazon EC2 实例。我已使用实例的安全组允许通过端口 22 的流量。

我尝试过sysctl -w net.ipv4.ip_forward=1sudo iptables -t nat -A PREROUTING -d 0.0.0.0/0 -p tcp --dport 22 -j DNAT --to-destination x.x.x.x:22但是当我尝试连接时 SSH 总是挂起ssh y.y.y.y

我还尝试了几乎所有能从互联网上找到的 iptables 命令,但都不起作用。总是挂起。

有任何想法吗?

答案1

由于您不太清楚自己想要实现什么,我假设您想将与 yyyy 的所有 ssh 连接重定向到在 xxxx 上运行的 ssh 服务器

在 yyyy 上,您必须启用转发(您做得正确)并将任何发往 yyyy 上端口 22 的连接转发到 xxxx:

iptables -t nat -A PREROUTING -d y.y.y.y -p tcp --dport 22 -j DNAT --to-destination x.x.x.x

现在,如果 yyyy 不是 Internet 和目标服务器 xxxx 之间的路由器(我相信这里可能就是这种情况),那么您还必须强制返回流量通过 yyyy,以正确“修复”返回数据包的源地址,以便它们与源(ssh 客户端)系统上的现有连接正确匹配。为此,您需要 SNAT 来修改重定向到 xxxx 的数据包的源地址:

iptables -t nat -A POSTROUTING -d x.x.x.x -p tcp --dport 22 -m conntrack --ctstate DNAT -j SNAT --to-source y.y.y.y

相关内容