VSCode连接服务器提示“无法解析主机”是本地DNS解析失败,需检查~/.ssh/config中HostName是否可解析、配置hosts文件、确认remote.SSH.configFile设置、刷新DNS缓存、禁用IPv6及排查杀软或代理干扰。

VSCode 连接服务器时提示“无法解析主机”,基本可以确定是本地 DNS 解析失败,不是 SSH 密钥或密码问题,也不是远程服务宕机——VSCode 根本没发起到 TCP 连接,卡在域名转 IP 这一步。
检查 ~/.ssh/config 中的 HostName 是否可解析
Remote-SSH 会优先读取 ~/.ssh/config,如果其中 HostName 填的是内网域名(如 dev-server.internal)或公司私有域名,而你的本地系统没配 DNS 或 hosts,就会直接报“无法解析主机”。
- 用
nslookup dev-server.internal或dig dev-server.internal测试是否返回有效 IP;不返回就确认是 DNS 层问题 - 临时改用 IP 地址测试:把
HostName换成192.168.1.100,能连上说明纯属解析问题 - 若必须用域名,优先在
/etc/hosts(macOS/Linux)或C:\Windows\System32\drivers\etc\hosts(Windows)里加一行:192.168.1.100 dev-server.internal - 别依赖路由器 DNS 转发——有些家用路由器对自定义域名支持极差,hosts 是最稳的兜底方式
验证 VSCode 是否读到了正确的 SSH 配置文件
VSCode Remote-SSH 不一定读你默认的 ~/.ssh/config,它会受 remote.SSH.configFile 设置和 shell 启动环境影响。
- 打开 VSCode 设置,搜
remote.SSH.configFile,确认值是空(即用默认路径)或明确指向~/.ssh/config - 如果你用 zsh / fish 启动 VSCode(比如从终端执行
code),但~/.ssh/config里用了Include或变量(如%d),可能因 shell 环境差异导致解析失败 - Windows 上若装了 Git for Windows 和 OpenSSH for Windows,两者 ssh.exe 可能冲突;任务管理器里看有没有多个
ssh.exe卡住,关掉再试 - 改完配置后必须彻底退出 VSCode 所有进程(不只是关窗口),否则旧 host 进程仍缓存着错误解析结果
强制刷新本地 DNS 缓存并换用可靠 DNS 服务器
即使你能 ping 通其他网站,marketplace.visualstudio.com 或你目标服务器域名仍可能因本地缓存污染或 ISP DNS 故障而解析失败。
- Windows:以管理员身份运行命令提示符,执行
ipconfig /flushdns+netsh winsock reset+netsh int ip reset,然后重启 - macOS:执行
sudo killall -HUP mDNSResponder;若用 dnsmasq,还要sudo brew services restart dnsmasq - 改 DNS:首选
223.5.5.5(阿里)、119.29.29.29(腾讯);避免用8.8.8.8—— 国内部分网络对其有 QoS 限速或拦截 - 禁用 IPv6:在网卡属性中取消勾选
Internet 协议版本 6 (TCP/IPv6),不少企业网络 IPv6 路由未配全,启用了反而 fallback 失败
排查杀毒软件或防火墙劫持 DNS 请求
某些国产安全软件(如 360、腾讯电脑管家)会静默替换系统 DNS 设置,或 hook getaddrinfo() 系统调用,导致 VSCode 进程 DNS 查询被拦截或返回空结果。
- 临时退出杀软,再试 Remote-SSH 连接;若恢复则确认是其干扰
- 检查
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters注册表项,看是否有非标准DnsPolicyConfig配置 - Windows Defender 防火墙里确认
Code.exe和Code Helper.exe在“专用/公用网络”下都有出站权限 - 特别注意:部分代理工具(如 Clash for Windows 的 TUN 模式)会接管全链路 DNS,但 VSCode Remote-SSH 默认不走系统代理,此时反而造成解析黑洞
真正卡住的点往往不在 SSH 协议层,而在你敲下连接命令前的那一次 gethostbyname() 调用——它失败得悄无声息,只留一句“无法解析主机”。盯住这个环节,比反复重装 OpenSSH 有效得多。











