You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux下无需第三方工具防止Telnet连接Cisco路由器超时?

Linux下无需第三方工具防止Telnet会话超时的几种方法

遇到Telnet连接定期超时的问题,完全可以用Linux自带的工具解决,不用装Putty或者SecureCRT这类第三方软件,下面分享几个实用的原生方案:

方法一:用Bash脚本封装Telnet+定时心跳

写一个简单的脚本,自动启动Telnet会话并在后台定时发送心跳字符,步骤如下:

  1. 创建一个名为telnet_keepalive.sh的脚本,内容如下:
#!/bin/bash
# 替换成你的路由器IP/主机名
ROUTER_IP="192.168.1.1"

# 启动Telnet会话并记录进程ID
telnet $ROUTER_IP &
TELNET_PID=$!

# 每2分50秒发送一个空字符(比3分钟超时提前10秒,避免断开)
while kill -0 $TELNET_PID 2>/dev/null; do
    sleep 170
    # 向Telnet进程的标准输入发送空字符(ASCII 0,不会触发命令执行)
    echo -ne '\0' > /proc/$TELNET_PID/fd/0
done
  1. 给脚本添加执行权限:
chmod +x telnet_keepalive.sh
  1. 直接运行脚本即可启动带心跳的Telnet会话:
./telnet_keepalive.sh

这个脚本会在后台持续检查Telnet进程是否存活,只要会话还在,就定期发送空字符作为心跳,路由器收到后不会触发任何命令,只会刷新超时计时器。

方法二:用watch命令给现有Telnet会话补心跳

如果已经手动启动了Telnet会话,不想关掉重来,可以用watch命令向当前终端发送心跳:

  1. 打开一个新的终端窗口,先找到Telnet会话所在的终端设备(比如/dev/pts/0),可以用who命令查看自己的终端:
who

输出里类似yourname pts/0 2024-05-20 10:00 (:0)的行,pts/0就是终端设备路径。

  1. 运行watch命令,每170秒向目标终端发送空字符:
watch -n 170 "echo -ne '\0' > /dev/pts/0"

这个方法适合临时给正在运行的会话续命,关掉watch进程就会停止心跳。

方法三:用Bash协进程(Coproc)实现更优雅的心跳

Bash有个内置的协进程功能(Coproc),可以在不单独开脚本的情况下,同时运行Telnet和心跳任务:

直接在终端输入以下命令(替换成你的路由器IP):

coproc TELNET { telnet 192.168.1.1; }
while true; do sleep 170; echo -ne '\0' >&${TELNET[1]}; done

协进程会把Telnet放到后台,然后循环发送心跳,整个过程都在当前终端环境里,关闭终端就会同时终止Telnet和心跳。

额外提示:SSH会话的续命方法(顺带一提)

如果之后改用SSH连接路由器,不用这么麻烦,直接修改~/.ssh/config文件添加以下配置即可:

Host *
    ServerAliveInterval 170
    ServerAliveCountMax 3

ServerAliveInterval是每170秒发送一次心跳,ServerAliveCountMax是连续3次没收到响应才断开,完美避免超时。

内容的提问来源于stack exchange,提问作者Khaled Abuelenain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:15:06