我使用 telnet 连接到 Cisco 路由器。
连接每 3 分钟超时一次。
如何阻止我的 telnet 会话因超时而与路由器断开连接。
据我所知,putty 和 SecureCRT 可以定期发送 null 或转义字符以阻止会话(telnet 或 SSH)超时。
如何在没有第三方程序的 Linux 上执行此操作?启动终端时,我使用以下脚本作为启动脚本:
#!/usr/bin/expect -f
spawn telnet <Router IP Address>
expect -re "ogin: "
send "*******\n"
expect -re "assword:"
send "***********\n"
sleep 2
expect "Router>"
interact
答案1
interact
的语句可以expect
采用类似于该expect
语句的成对模式和操作。特别是,您可以添加超时模式和发送操作。例如,
interact timeout 10 { send "date\r" }
会照常发送您输入的内容,但如果您 10 秒没有输入,它将发送字符串date
和回车符。如果您在字符模式下使用 telnet,则只需发送一个空格后跟一个退格键即可保持连接处于活动状态,这不会中断您已键入的任何部分行:
interact timeout 150 { send " \b" }
答案2
telnet
作为安全措施,您在 Cisco 端的会话有默认超时,而在 Linux 端则没有。
我建议不要将它们timeouts
与 TCP keepalive 混淆。它们是针对控制台/操作员不活动的第 7 层超时。
我想说,出于安全考虑,您应该设置ssh
会话而不是Cisco 路由器。telnet
如果您需要,您可以在思科端执行的配置之一ssh
是:
ip ssh timeout 300
至于telnet
,您可以将默认超时更改为:
r1# configure terminal
r1(config)# line vty
r1(config-line)# exec-timeout 300
您还可以使用exec-timeout 0
或ip ssh timeout 0
来避免在telnet
或中超时ssh
,但是这不被认为是良好的安全实践。 。
我还建议更改路由器的其他默认配置,即默认hostname
.