使用/etc/hosts配置IPv6主机名SSH连接闲置1分钟被断开如何解决
可能的原因
- 地址配置不一致:
/etc/hosts中填写的IPv6地址为台式机的公网IPv6地址,你直接连接时使用的是内网IPv6地址(ULA/链路本地地址)。公网IPv6链路通常会被运营商或家庭路由器设置60秒的会话闲置超时,无流量就会自动切断连接,而内网IPv6不受该规则限制。 - SSH配置差异化:你的Mac本地
~/.ssh/config文件中针对该主机名存在单独配置,未启用SSH保活机制,而直接连接IP时走全局配置,默认开启了保活,所以不会断连。 - 地址解析优先级问题:
/etc/hosts中该主机名同时绑定了IPv4和IPv6地址,SSH默认优先走IPv4链路,而你的IPv4链路存在闲置超时规则。
解决方法
方案1:配置SSH保活机制(通用,适配所有场景)
直接在Mac侧配置SSH主动发送保活包,避免闲置断连:
- 打开终端编辑SSH配置文件:
nano ~/.ssh/config(如果文件不存在会自动新建) - 添加以下内容:
Host 你配置的主机名 ServerAliveInterval 30 ServerAliveCountMax 2 AddressFamily inet6
参数说明:
- 每30秒向服务端发送一次保活探测包
- 连续2次探测无响应才会断开连接
AddressFamily inet6强制走IPv6连接,避免解析到IPv4地址出问题
- 保存退出后重新连接即可生效。
如果需要对所有SSH连接生效,把第一行Host 你配置的主机名改为Host *即可。
也可以选择在Ubuntu服务端配置,修改/etc/ssh/sshd_config添加:
ClientAliveInterval 30 ClientAliveCountMax 2
修改完成后执行sudo systemctl restart sshd生效。
方案2:修正/etc/hosts配置
核对你直接连接时使用的IPv6地址,替换掉/etc/hosts中原来的公网IPv6地址,优先使用固定的内网ULA地址(fc00::/7开头)或者链路本地地址,避免走公网链路。
内容的提问来源于stack exchange,提问作者rainboat
相关产品推荐
相关产品推荐

