我已经ServerAliveInterval并且在少数机器的ClientAliveIntervalSSH 客户端/服务器配置文件中也设置为 540(我认为将其设置为更多不是一个好主意)。我处理了许多 SSH 会话,这些会话在几分钟后就会冻结。
我该如何解决?我想要的是有一个完全不冻结的会话,这样如果我在 8 点打开一个会话并且 4 小时不使用它,例如,仍然在 12 点再次使用它而不必再次登录.
Val*_*ami 123
您在做出的更改/etc/ssh/ssh_config和/etc/ssh/sshd_config是正确的,但仍然不会有任何效果。
要使您的配置正常工作,请在客户端上进行以下配置更改:
/etc/ssh/ssh_config
Host *
ServerAliveInterval 100
Run Code Online (Sandbox Code Playgroud)
ServerAliveInterval 客户端会每 100 秒向服务器发送一个空包,以保持连接处于活动状态
NULL 数据包 由服务器发送给客户端。相同的数据包由客户端发送到服务器。TCP NULL 数据包不包含任何控制标志,如 SYN、ACK、FIN 等,因为服务器不需要来自客户端的回复。NULL 数据包描述如下:https : //tools.ietf.org/html/rfc6592
然后在服务器上配置sshd部分。
/etc/ssh/sshd_config
ClientAliveInterval 60
TCPKeepAlive yes
ClientAliveCountMax 10000
Run Code Online (Sandbox Code Playgroud)
ClientAliveInterval服务器将等待 60 秒,然后再向客户端发送空包以保持连接活动
TCPKeepAlive是为了确保某些防火墙不会丢弃空闲连接。
ClientAliveCountMax服务器将向客户端发送活动消息,即使它没有从客户端收到任何消息。
最后重启 ssh server
service ssh restart 或 service sshd restart取决于您使用的系统。
小智 13
个人建议:screen在远程主机上使用;只要它在终端中保持活动状态,它就会设法使您的连接保持活动状态。
以下是我通常添加的内容,/etc/screenrc以便快速识别我的屏幕会话:
hardstatus alwayslastline
hardstatus string "%{= kG}[ %{G}%H %{g}][ %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]"
defscrollback 8192
Run Code Online (Sandbox Code Playgroud)
编辑:提示。
该hardstatus字符串将显示底部状态行,例如:

回滚缓冲区也扩展到 8192 行,而不是通常的 1000-1500(取决于分布)。
如果问题是笔记本电脑处于休眠状态或网络连接不完美,我建议使用moshwhich run overssh并允许自动重新连接。
从网站:
Mosh(移动外壳)
允许漫游的远程终端应用程序,支持间歇性连接,并提供用户按键的智能本地回声和线路编辑。
Mosh 是 SSH 的替代品。它更加强大和响应迅速,尤其是通过 Wi-Fi、蜂窝和长途链接。
Mosh 是免费软件,可用于 GNU/Linux、BSD、macOS、Solaris、Android、Chrome 和 iOS。
结合tmux(或较旧的screen),这使我可以通过ssh笔记本电脑连接到服务器,即使在更改 wifi 连接和幸存的移动数据丢失时也能保持连接数天。
| 归档时间: |
|
| 查看次数: |
118494 次 |
| 最近记录: |