client_loop: send disconnect: Broken pipe
本机(客户端)配置,推荐
写入 ~/.ssh/config
文件
Host *
ServerAliveInterval 120
ServerAliveCountMax 30
每个选项的含义如下:
Host:指定的配置仅适用于“Host”关键字后面列出的主机。因为我们使用了通配符 (*),所以它们适用于所有主机。
ServerAliveInterval:设置一个超时间隔(以秒为单位),在此之后,如果没有从服务器收到数据,SSH 将通过加密通道发送消息来请求服务器响应。默认为0,表示这些消息不会发送到服务器。
ServerAliveCountMax:设置 SSH 在没有从服务器返回任何消息的情况下可以发送的服务器活动消息的数量。如果在发送服务器活动消息时达到此阈值,SSH 将与服务器断开连接,从而终止会话。默认值为 3。
也就是说,客户端每隔120秒(2分钟)就会向服务器发送一条keepalive消息,共发送30次。 120 * 30 = 3600 秒,即一小时。这是即使没有活动,我们的 SSH 会话也将保持活动状态的总时间。
服务端(针对所有连接用户)
编辑 /etc/ssh/sshd_config
文件,添加或修改如下配置
TCPKeepAlive yes
ClientAliveInterval 120
ClientAliveCountMax 30
然后重启 sshd 服务即可
systemctl restart sshd
注意
当ssh心跳保持连接配置后不生效,可能还要检查 TMOUT 系统变量
tmux 或 screen 意外被迫关闭问题,除了设置 ssh 配置外还需要检查系统 TMOUT 变量设置
查看、修改、验证
# 查看
echo $TMOUT
# 修改
vim /etc/profile
TMOUT = 0
# 重载
source /etc/profile