远程连接超时分连接建立和维持两阶段:连不上需查TCP层可达性、防火墙及syn重试;连上后断开应配置ClientAliveInterval/ServerAliveInterval;终端自动退出则由Shell的TMOUT控制,三者层级独立。

远程连接超时不是单一配置项,而是分“连接建立阶段”和“连接维持阶段”两类问题。你遇到的到底是连不上(TCP握手失败),还是连上后几分钟就断(空闲断连),解决路径完全不同。
ssh 连不上:检查 TCP 层连接超时
这类问题表现为 ssh: connect to host x.x.x.x port 22: Connection timed out,本质是客户端发 SYN 包后没收到服务器响应。常见原因不是 SSH 配置,而是网络或防火墙层面阻断。
- 先确认目标 IP 和端口可达:
telnet x.x.x.x 22或nc -zv x.x.x.x 22;失败则说明连接根本未抵达 sshd - 检查服务器防火墙是否放行 22 端口:
sudo ufw status(Ubuntu)或sudo firewall-cmd --list-ports(CentOS/RHEL) - 内核级连接重试次数由
/proc/sys/net/ipv4/tcp_syn_retries控制,默认值 6(约 130 秒超时),一般无需修改;如需缩短,可临时设为 3:echo 3 | sudo tee /proc/sys/net/ipv4/tcp_syn_retries - 永久修改需写入
/etc/sysctl.conf:追加net.ipv4.tcp_syn_retries = 3,再执行sudo sysctl -p
ssh 连上后自动断开:调整保活参数
这是最常被误称为“超时”的问题——实际是空闲连接被服务端或客户端主动关闭。关键看谁在控制断连:服务端用 ClientAliveInterval,客户端用 ServerAliveInterval。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 服务端全局生效(推荐):编辑
/etc/ssh/sshd_config,确保有这两行(取消注释或新增):ClientAliveInterval 60ClientAliveCountMax 3
重启服务:sudo systemctl restart sshd - 客户端单用户生效:编辑
~/.ssh/config,添加:Host *ServerAliveInterval 60ServerAliveCountMax 3
注意权限:chmod 600 ~/.ssh/config - 临时调试用命令行:
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 user@host - 别混淆
TCPKeepAlive:它工作在 TCP 层,仅探测链路是否通,不防 NAT 超时;ServerAliveInterval是 SSH 协议层心跳,能穿透中间 NAT 设备
终端登录后自动退出:Shell 级空闲超时
如果 SSH 连接没断,但 Bash 提示 timed out waiting for input: auto-logout,那是 Shell 的 TMOUT 在起作用,和 SSH 保活无关。
- 全局设置(影响所有 Bash 用户):在
/etc/profile末尾加TMOUT=600和export TMOUT - 用户级设置:在
~/.bashrc里写export TMOUT=1800(30 分钟) - 强制只读(防用户覆盖):新建
/etc/profile.d/autologout.sh,内容为:TMOUT=300readonly TMOUTexport TMOUT
再sudo chmod +x /etc/profile.d/autologout.sh - 当前会话临时禁用:
unset TMOUT
真正容易被忽略的是层级关系:TCP 层超时 → SSH 协议层保活 → Shell 会话超时,三者独立生效、互不覆盖。先定位现象发生在哪一层,再动对应配置,否则改了 sshd_config 却发现是 TMOUT 在作怪,纯属白忙。

















