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

Dan*_*iel 6 networking ssh vpn ssh-tunnel

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

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

这怎么可能实现?有这个术语吗?这个问题还有其他解决方案吗?


编辑:添加图表

我希望这能解决问题。我还发现这篇文章对此进行了更多讨论,但并未针对多个客户端进行讨论。http://toic.org/blog/2009/reverse-ssh-port-forwarding/

在此处输入图片说明

小智 5

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

在防火墙后面的计算机上ssh -NR 2210:localhost:22 intermediaryuser@intermediary.remote.machine.tld运行。someuser我假设 2210 在中间机器上可用;如果不是,请选择另一个端口。您想要访问防火墙后面的每台计算机都需要有自己的端口。

连接到中介的 Internet 用户需要对中介进行 ssh 访问。要进入防火墙后面,只需ssh -t intermediaryuser@intermediary.remote.machine.tld "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");
Run Code Online (Sandbox Code Playgroud)

有了类似的东西,也许你有机会允许中介上的一个空密码帐户来稍微自动化这个过程。

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