添加ServerAliveInterval 600后仍遇SSH Broken pipe错误求助
解决SSH闲置触发Broken Pipe断开的问题
排查与修复步骤
先验证临时配置是否生效
你当前的~/.ssh/config全局配置可能没生效,先直接用带参数的SSH命令测试:ssh -o ServerAliveInterval=600 -p 2220 bandit12@bandit.labs.overthewire.org如果这么连之后闲置不会断开,说明你的
~/.ssh/config可能有语法问题——比如空行干扰、拼写错误,仔细检查ServerAliveInterval的拼写,确保配置项前面没有多余的特殊字符。补充ServerAliveCountMax配置
只设ServerAliveInterval有时候不够,默认SSH会在3次心跳无响应后断开。可以在配置里加上重试次数:Host * ServerAliveInterval 600 ServerAliveCountMax 5这样会尝试5次心跳,减少因单次网络波动导致的断开。
开启TCP层面的Keepalive
远程服务器的sshd_config没设ClientAliveInterval,但系统级的TCP Keepalive可能设得很短(比如60秒),直接强制断开闲置连接。你可以在本地SSH配置里开启TCP Keepalive:Host * ServerAliveInterval 600 TCPKeepAlive yes双管齐下,同时用SSH应用层心跳和系统TCP心跳。
给目标主机单独配置更激进的心跳
全局配置可能优先级不够,或者直接给bandit服务器单独写配置,缩短心跳间隔:Host bandit12 HostName bandit.labs.overthewire.org Port 2220 User bandit12 ServerAliveInterval 30 ServerAliveCountMax 10之后直接用
ssh bandit12连接就行,30秒一次心跳基本不会触发闲置断开。
内容的提问来源于stack exchange,提问作者Ukpa Uchechi
相关产品推荐
相关产品推荐

