SSH连接卡顿主因是远程服务器端sshd的UseDNS默认开启导致DNS反向解析超时,需登录服务器修改/etc/ssh/sshd_config中UseDNS为no并重启sshd服务,内网、虚拟机等无PTR记录环境尤为明显。
mac 本身是 ssh 客户端,不运行 sshd 服务,所以不能也不需要在 mac 上关闭 dns 反向解析。真正卡顿的根源在远程服务器(linux/unix 主机、交换机、云主机等)的 ssh 服务端配置,即 sshd 的 usedns 选项。
关键点:卡在服务器端,不是你的 Mac
当你用 Mac 上的 Terminal 或 iTerm 执行 ssh user@192.168.1.100 后黑屏等待 5–15 秒,问题出在目标服务器启动认证前,对你的客户端 IP 做了两件事:
- 反向查 PTR 记录(DNS 反向解析),看这个 IP 对应什么域名;
- 再正向查 A 记录,验证该域名是否真指向这个 IP。
内网、虚拟机、私有云、离线环境通常没有 PTR 记录或 DNS 不可达,导致每次连接都等超时,而 Mac 客户端只是被动等待响应。
正确操作:登录到目标服务器改配置
你需要有该服务器的管理员权限(如 root 或 sudo 权限),按以下步骤操作:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 用 ssh 登录进那台慢速的服务器(哪怕等十几秒,只用登录一次);
- 编辑服务端配置:
sudo nano /etc/ssh/sshd_config; - 找到
#UseDNS yes这一行(可能被注释),改为:UseDNS no; - 顺手关掉另一个拖慢项:
GSSAPIAuthentication no(若存在,也取消注释并设为 no); - 保存退出,重启服务:
sudo systemctl restart sshd(CentOS/RHEL)或sudo service ssh restart(Ubuntu/Debian)。
补充:Mac 客户端可做的优化(次要但有用)
虽然解决不了主因,但 Mac 端可以提升体验:
-
启用连接复用:在
~/.ssh/config中添加:Host *
ControlMaster auto
ControlPath ~/.ssh/control/%h_%p_%r.sock
ControlPersist 3600
然后执行mkdir -p ~/.ssh/control创建目录; -
跳过已知主机检查(仅内网可信环境):加一行
StrictHostKeyChecking no,但不推荐用于公网; -
用 -o 快速验证是否生效:临时测试不用改服务器配置:
ssh -o UseDNS=no user@host—— 这只是客户端提示服务端“别做 DNS 查”,实际是否生效仍取决于服务端是否尊重该提示(OpenSSH 6.8+ 支持,但最稳方案仍是服务端改sshd_config)。
怎么确认改对了?
改完服务器配置并重启 sshd 后,在 Mac 终端执行:
time ssh -o ConnectTimeout=5 user@host "exit"
如果 real 时间从原来的 10s+ 降到 0.3s 左右,说明优化成功。

















