我们的企业防火墙配置为在 30 分钟不活动后断开 ssh 连接。有时,我需要在服务器上执行一项操作,该操作需要超过此时间的持续连接,但我的 shell 看起来处于非活动状态(至少对防火墙而言)。
似乎打开第二个 ssh 连接并持续活动(例如,运行 top)不足以维持 shell。我不希望将进程设置为后台,然后将更具交互性的内容置于前台,因为任何警报或警告都可能逃过我的注意。我可以每隔 x 分钟定期反复按下 shell 窗口中的回车键,但这是不可取的。
有些程序,例如 sweep(来自 Sophos),其光标会在 shell 中旋转,从而维持连接(即,它会循环通过 \ | / – 等等)。效果很好。
是否有一些技巧(也许与 bash 相关)可以达到此目的?
答案1
在您的客户端的 .ssh/config 中,尝试添加类似这样的内容。
Host *
ServerAliveInterval 60
ssh_config 手册
ServerAliveInterval
Sets a timeout interval in seconds after which if no data has
been received from the server, ssh(1) will send a message through
the encrypted channel to request a response from the server. The
default is 0, indicating that these messages will not be sent to
the server...
从腻子中,您可能想要调整Connection\Seconds between keepalives
为非零值。
答案2
如果在screen
会话中运行 - 您可以在屏幕底部添加“系统负载”计数器(或系统日期/时间 -caption always "%d.%m.%y %0c%{=b kW}"
在您的 .screenrc 中添加类似的内容就可以了),这将不定期地生成一些小输出(重新绘制负载数字或日期/时间)。
它看起来是这样的 - 左下角,系统加载
一个甚至不太直接的:) 解决方案(keepalives 是最直接的)是在后台运行一些 shell 脚本并每 30-60 秒向 stderr 生成一些输出...例如while true; do echo "ding" > /dev/stderr; sleep 30; done &
。