我知道许多销售网络/服务器设备的供应商,这些设备都有一个支持按钮,一旦按下,就会建立一个 SSH 支持隧道回到供应商的主服务器,以便支持技术人员可以直接连接到设备并对其进行故障排除。
我想设置它,但不需要按支持按钮。我想在远程位置部署笔记本电脑,然后定期自动回拨主机,并在机箱重新启动或远程网络短暂断开连接时重新建立连接。(两端都是 Linux 机箱)
基本上,我想在客户环境中部署临时的 Zenoss/Cacti 监控服务器,但我不想突破他们的防火墙,或者处理他们特定于站点的 VPN 设置。
是否有人知道有助于设置此功能的任何脚本或 ssh 守护程序?
答案1
尝试自动SSH。它正在执行您所要求的操作,假设您设置了公钥认证(否则您每次都必须手动输入密码)。
引自autossh
网页:
autossh 是一个用于启动 ssh 副本并对其进行监视的程序,当其死机或停止传输流量时,根据需要重新启动它。
如果要自动启动,可以使用crontab
。运行crontab -e
并添加
@reboot /usr/local/bin/start_tunnel.sh
要不就
@reboot autossh username@host <other ssh options here>
警告:autossh
如果第一次连接失败(网络未启动/解析不起作用),请勿启动。解决方法:将类似以下内容的内容放入start_tunnel.sh
:
while true; do
autossh username@host -M 12313 -R...
sleep 15
done
这样,如果autossh
由于某种原因退出,它会稍后重新启动。
此外,autossh
默认连接轮询并不经常发生,您可以使用AUTOSSH_POLL
和AUTOSSH_FIRST_POLL
变量来控制它。
答案2
但我不想突破他们的防火墙
所以归根结底,你试图绕过现有的安全机制。这不太道德。为什么不告诉他们应该如何配置防火墙呢?
我以前曾使用过 SSL 隧道上的 ppp(使用 stunnel,但 ssh 也同样可行,而且大多数其他 vpn 也可以使用)将远程设备映射到网络中。我将其设置为作为 sysV initscript 运行,但从 upstart 或 DJB 的 daemontools 运行可能是一种更明智的方法。
答案3
你当然有权限做这样的事吧?在我工作的地方,这样做会公然违反安全政策。
无论如何,如果您只有少数几台机器,您可以不使用任何外部应用程序。只需设置“支持”服务器的公钥身份验证,并在笔记本电脑上的 crontab 中添加类似以下内容:
@reboot ssh -R 65000:localhost:22 support.box.on.example.com
(显然,不同的机器使用不同的端口,下一台笔记本电脑可以使用端口 65001 等等。)
现在,当您通过 ssh 连接到端口 65000 上的本地主机时,您将连接到笔记本电脑的端口 22。