一、问题描述

在 Mac 终端用 iterm2 连接服务器时,使用 ssh root@xxx.xx.xx.xxx 命令登录服务器,一段时间不用服务器,再进入终端会无响应,报错

packet_write_wait: Connection to xxx.xx.xx.xxx port 22: Broken pipe

二、解决方法

网上的很多方法写得不够清楚,下面我详细介绍下方法

在客户端打开 ~/.ssh/config 文件(下面的设置对所有的远程服务器都生效)

(1)设置固定断开时间
在文件的最后添加如下代码:

Host *
	# 客户端每隔 30 秒给服务器发送一次请求信号(用于保持连接)
    ServerAliveInterval 30
    #  如果服务器有 10 次未响应请求,就会自动断开
    ServerAliveCountMax 10

上面的代码可以让你 30*10=300 秒内不操作终端而不断开连接,如果超过 300 秒服务器就会自动断开连接(无响应,键盘无法输入),也就是会出现packet_write_wait: Connection to xxx port 22: Broken pipe

(2)保持长时间连接
如果想在你电脑开着的时候一直保持客户端和服务器的连接(除非使用 exit 命令断开),可以用如下代码:

Host *
	# 客户端每隔 30 秒给服务器发送一次请求信号
    ServerAliveInterval 30

当然如果你电脑待机了,它也会断开。


备注:上面是在客户端上配置的,其实也可以在特定服务器上配置,代码如下:

sudo vim /etc/ssh/sshd_config

ClientAliveInterval 60 

这样可以保持一直连接

其他问题:ssh connection “client_loop: send disconnect: Broken pipe”

ssh connection “client_loop: send disconnect: Broken pipe”

sshd_config 文件中,添加如下内容:

Host *
    TCPKeepAlive no

Reference

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐