加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 可能的TIME_WAIT问题的解决方法,防止重新建立损坏的SSH

发布时间:2020-12-14 03:04:11 所属栏目:Linux 来源:网络整理
导读:虽然不打算交叉发帖,但在将此问题发送到SecurityFocus的OpenSSH列表后,我注意到该列表的流量相当低(之前的帖子大约是5个月前).话虽这么说,我决定在这里重新发布,因为这个问题可能会得到更多的关注(并且如果得到回答,将更有可能被其他人使用): 问题:我有一
虽然不打算交叉发帖,但在将此问题发送到SecurityFocus的OpenSSH列表后,我注意到该列表的流量相当低(之前的帖子大约是5个月前).话虽这么说,我决定在这里重新发布,因为这个问题可能会得到更多的关注(并且如果得到回答,将更有可能被其他人使用):

问题:我有一个从内部机器到我的DMZ中的主机的反向SSH隧道,它设置为在系统启动时启动并在隧道出现故障时重新启动.但是,当隧道中断时(例如,由于网络中断),由于DMZ主机上的端口正在使用,它无法重新建立.从我读取的OpenSSH邮件列表存档和其他地方来看,这似乎是因为端口处于TIME_WAIT状态.这很好:我可以在设置隧道的脚本中放入一个sleep语句.但是,这导致了两个问题:
1)任何想法如何确定在特定的Linux(或其他)系统上定义TIME_WAIT间隔是什么?虽然我可以睡5分钟并且没事,但是尽可能多地减少时间会很好.
2)虽然OpenSSH似乎不支持“ClearAllForwardings”选项,但是是否有类似的功能,即auth’d连接可以自动拆除并重新创建它之前建立的现有连接?

长时间睡眠可能“足够好”,但如果可能的话,我更愿意以更有效的方式处理TIME_WAIT条件.

我感谢任何指导或建议!

解决方法

我认为你可以使用各种SSH设置,如TCPKeepAlive,ServerAliveInterval,ServerAliveCountMax等来设置如果连接断开,它将杀死所有内容.我有类似的设置,我对双方的SSHD和SSH进行了很多修改,以配合我想要的.然后我有一个cron作业,如果需要的话,每5分钟运行一次,重启隧道.
#!/bin/bash
if ps aux | grep "ssh -fnNTx" | grep -v "grep"
then
echo "Already Running"
else
echo "Starting now"
ssh -fnNTx -L 1514:127.0.0.1:514 user1@X.X.X.X
fi

到目前为止,这个解决方案对我来说很好.您还可以设置某种类型的Nagios检查或其他脚本以查看隧道是否已打开,如果没有,请执行该pid的杀死以便重新启动.

编辑:

以前的文章谈了很多关于TIME_WAIT的问题. How to forcibly close a socket in TIME_WAIT?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读