我们的设置如下: - 2 个托管站点的 tomcat 服务器 - 1 个负载均衡器 - SSH 连接到包含数据库的客户端服务器
这种方法效果很好,但有一个客户端的 SSH 隧道无法持续保持连接。最初,有问题的服务器上的 SSH 连接会间歇性断开。为了解决这个问题,我添加了 ServerAliveInterval 和 ServerAliveCountMax 以及 ClientAliveInterval 和 ClientAliveCountMax。连接保持了几天,但后来客户的服务器崩溃了,连接断开了。这次服务器崩溃归因于 SSH 隧道,但我不确定是否如此。tunnel.bat 文件如下;
:loop
ECHO OFF
echo y | plink.exe -ssh -R 24011:localhost:1433 [email protected] -pw PasswordHereButI'mNotTelling
ping -n 10 -w 1 127.0.0.1>nul
REM ping -n 10 -w 1 127.0.0.1
goto loop
将日志级别更改为 3 并得到以下输出;
Jun 10 11:55:09 Phobos sshd[18092]: debug1: server_input_global_request: rtype tcpip-forward want_reply 1
Jun 10 11:55:09 Phobos sshd[18092]: debug1: server_input_global_request: tcpip-forward listen localhost port 24011
Jun 10 11:55:09 Phobos sshd[18092]: debug3: channel_setup_fwd_listener: type 11 wildcard 0 addr NULL
Jun 10 11:55:09 Phobos sshd[18092]: debug3: sock_set_v6only: set socket 8 IPV6_V6ONLY
Jun 10 11:55:09 Phobos sshd[18092]: debug1: Local forwarding listening on ::1 port 24011.
Jun 10 11:55:09 Phobos sshd[18092]: debug2: fd 8 setting O_NONBLOCK
Jun 10 11:55:09 Phobos sshd[18092]: debug3: fd 8 is O_NONBLOCK
Jun 10 11:55:09 Phobos sshd[18092]: debug1: channel 1: new [port listener]
Jun 10 11:55:09 Phobos sshd[18092]: debug1: Local forwarding listening on 127.0.0.1 port 24011.
Jun 10 11:55:09 Phobos sshd[18092]: debug2: fd 9 setting O_NONBLOCK
Jun 10 11:55:09 Phobos sshd[18092]: debug3: fd 9 is O_NONBLOCK
Jun 10 11:55:09 Phobos sshd[18092]: debug1: channel 2: new [port listener]
还有更多类似的东西,将根据要求添加更多,但这个块有相同的 ID [18092],所以认为这是一个好的开始。然后我和老板使用 C# 创建了 ssh 连接。这再次运行良好,但我们立即接到电话说服务器再次崩溃了。
有人能告诉我 SSH 隧道是否是导致服务器崩溃的原因吗?我认为可能存在许多问题/原因;- 服务器内存接近峰值(当前使用了 16GB 中的 15GB)- netstat 显示连接处于 close_wait 等状态 - 与使用端口 1433 的 sqlservr.exe 冲突
我对 SSH 隧道简直就是噩梦。我们断断续续地尝试解决这个问题已经超过三个星期了,但仍然没有得到解决,所以如果有人能帮忙的话,我将永远感激你。
答案1
我会认真考虑为此采用专用的 VPN 连接(硬件或软件)——正如您所发现的,永久 SSH 隧道非常容易受到黑客攻击并且容易出现故障/问题。
但是,如果你真的想要使用 SSH 隧道,你可以使用自动SSH从 Linux 服务器发起连接。我不确定是否有可用的 Windows 版本(您的问题提到了 .exe,因此我假设 Windows 是您的设置的一部分)。