使用反向 SSH 通过一台服务器连接两个客户端

使用反向 SSH 通过一台服务器连接两个客户端

我正在尝试设置位于防火墙后面且具有动态 IP 地址的多台客户端 PC,以便另一台 PC 可以建立 SSH 连接。

我的理论是设置一个具有可公开访问的静态 IP 的服务器,该服务器将充当 SSH 服务器。客户端发起反向 SSH 连接。当需要来自另一个(控制器)客户端的连接时,客户端会连接到服务器,然后服务器会将该连接修补/隧道化到所需的远程客户端。

如何实现这一点?有相关术语吗?还有其他解决方案吗?


编辑:添加图表

我希望这能澄清问题。我还发现这篇文章对此进行了更多讨论,但没有涉及多个客户端。http://toic.org/blog/2009/reverse-ssh-port-forwarding/

在此处输入图片描述

答案1

我认为没有一种简单的方法可以大规模地做到这一点。而且你并没有真正提到这些 ssh 连接的范围。仅限终端?可能会让事情变得更容易一些。

在防火墙后面的机器上运行。我假设中间机器上有 2210 端口;如果没有,请选择另一个端口。您要访问的防火墙后面的每台机器都需要自己的端口。ssh -NR 2210:localhost:22 [email protected]someuser

连接到中介的互联网用户需要中介上的 ssh 访问权限。要进入防火墙,只需获取终端访问权限即可。您需要在每个服务器的不同端口上执行相同的操作。ssh -t [email protected] "ssh someuser@localhost -p 2210"

您可以对第一部分进行守护进程处理,这样它就会在启动时发生。我不知道最好的方法是什么,比如说,如何轻松管理两组登录名、密码等。您可以根据 ssh 密钥创建无密码登录,但这需要花费一些时间来设置,并且需要为每个用户都设置一次。

如果终端仅适合您......

我创建了一个小型 perl 脚本,作为名为 sshcatcher 的用户的登录 shell 包装器。我将其保存到 /usr/local/remote.pl:

#!/bin/perl

print "Please enter your username to access the firewalled server: ";
$user = <>;

chomp($user);

system("ssh", "$user\@localhost -p 2210");

有了这样的事情,也许你可以有机会允许密码为空的帐户让这个过程稍微自动化一点。

vipw 条目如下所示: sshcatcher:x:2000:2000::/home/sshcatcher:/usr/local/remote.pl

相关内容