TMOUT引起服务器断开连接解决方法
08/10
本文最后更新于
2024年08月10日,已超过
203天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
服务器管理员为了系统安全性和减少开销,一般会设置一定时间内shell没有活动自动断开连接。但如果设置时间过短,查查资料/休息下,再回终端工作发现已经退出登录是挺烦恼的。
那么如何绕过这个限制保持SSH会话长时间在线?
TMOUT变量
首先我们要确认管理员如何实现该功能的。
原先我以为自动断开连接是通过SSH配置实现的,后来发现是通过shell的TMOUT
环境变量实现的。
管理员会在系统配置文件/etc/profile
中设置TMOUT值,并将其设为只读变量。
export TMOUT=1200 # 保持在线1200秒,不活动退出
readonly TMOUT
普通用户没有权限unset
这个只读变量,这样用户就不能关闭这个自动退出功能了。
$ unset TMOUT
-bash: unset: TMOUT: cannot unset: readonly variable
解决方法
方法一
一种解决思路是保持shell繁忙,可以在~/.bashrc
加上一段代码:
# ~/.bashrc
alias bs="while sleep 1000; do printf '\33[0n'; done"
以上代码功能是:while死循环,每隔1000秒会输出一个转移字符。这个转义字符ChatGPT回答如下
或者设置
# ~/.bashrc
alias bs="watch -n 1000 date"
watch命令每隔1000秒执行date
命令并输出结果到屏幕上,可以当做时钟。
以上功能退出方式是键入Ctrl-C
快捷键。
方法二
另一种思路是在登录shell时不读取/etc/profile
,但这种方法很麻烦,也会影响shell一些基本设置。
文后参考链接中提到的一些其它方法测试没有效果。如果你有更好的方法,欢迎留言。
参考资料

