我正在尝试设置位于防火墙后面且具有动态 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