我有一台 Mac OS X 服务器(称为内部服务器防火墙后面撤销通过端口转发,其中 remote.server 是公共服务器的域/IP,我将其称为ssh -gnN -R *:remoteport:localhost:localport [email protected]
远程服务器。然后我就可以通过连接到 来连接到内部服务器了remote.server:remoteport
。
隧道会定期失败,为此,我在内部服务器上编写了一个脚本,该脚本会尝试重新连接到远程服务器,直到成功为止。这种方法已经成功过多次。
但最近,我遇到了一个错误,内部服务器与远程服务器失去连接,而我在内部服务器上所做的任何操作都无法恢复连接。必须重新启动远程服务器,之后脚本会立即重新建立隧道。
远程服务器是运行 CentOS 6 基本安装的 VPS。过去几个月配置没有变化。远程服务器运行隧道超过 4 个月没有出现错误,然后在过去 12 小时内以这种方式失败了两次,两次重启间隔仅几个小时。
什么样的事情可能导致这种行为,我应该从哪里开始寻找问题?
答案1
最有可能的情况是客户端连接已丢失,但远程服务器尚未关闭连接。这会导致端口冲突,因为旧会话仍会监听您尝试绑定的端口。
登录到远程服务器,识别陈旧的 sshd 进程,并向其发送 HUP 信号 ( kill -HUP
) 以终止会话及其关联的侦听器。
也就是说,你真的不应该在生产环境中依赖这种类型的“持久”隧道。(特别是如果你用它来规避出于某种原因而实施的防火墙策略)