VSCode Remote-SSH 连不上服务器大概率是服务端 ~/.ssh 目录权限非 700、authorized_keys 文件权限非 600、主目录被 group/other 写入、公钥格式错误或 SSH 配置中 Host 别名含下划线、未指定 IdentityFile 等所致。

VSCode 远程开发连不上服务器?大概率是 ~/.ssh/authorized_keys 权限不对,或者公钥没放对位置 —— 不是 VSCode 问题,是 OpenSSH 的硬性校验规则在拦你。
为什么 ssh -i 能连,但 VSCode Remote-SSH 连不上?
VSCode Remote-SSH 默认走系统 SSH 客户端,但它严格复用 OpenSSH 的服务端校验逻辑。哪怕你本地 ssh -i ~/.ssh/id_rsa user@host 成功,只要服务端 /home/user/.ssh/ 目录或 authorized_keys 权限过宽(比如目录是 755、文件是 644),sshd 就会静默拒绝密钥认证,日志里只留一句 Authentication refused: bad ownership or modes。
-
~/.ssh目录权限必须是700(即drwx------) -
~/.ssh/authorized_keys文件权限必须是600(即-rw-------) - 用户主目录(
~)不能是 group-writable 或 world-writable(即不能含w权限给 group/other) - 公钥内容必须**逐行粘贴**,不能多空行、不能带 Windows
\r、不能混入注释行(除非以#开头且单独成行)
如何正确生成并部署公钥到远程服务器?
别用 GUI 工具导出“OpenSSH 格式”再手动改,容易丢格式。直接用命令行生成 + ssh-copy-id 推送最稳:
- 本地终端运行:
ssh-keygen -t ed25519 -C "your_email@example.com"(推荐 ed25519,比 rsa 更快更安全) - 确认密钥保存路径(默认
~/.ssh/id_ed25519),一路回车即可 - 推送公钥:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host(自动处理权限和追加逻辑) - 如果
ssh-copy-id不可用(如某些 Alpine 镜像),手动执行:cat ~/.ssh/id_ed25519.pub | ssh user@host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
VSCode Remote-SSH 连接配置要注意什么?
配置文件 ~/.ssh/config 是关键,VSCode Remote-SSH 完全依赖它,不是靠 UI 表单填的那些字段:
- 主机别名必须唯一,且不能含下划线(
_)—— OpenSSH 不认,VSCode 会解析失败 - 必须显式指定
IdentityFile,尤其当你有多个密钥时:Host myserver<br> HostName 192.168.1.100<br> User ubuntu<br> IdentityFile ~/.ssh/id_ed25519
- 如果服务器 SSH 端口不是 22,一定要加
Port 2222,漏了就会卡在 “Resolving host…” - 避免使用
ForwardAgent yes,除非真需要跳转代理;它可能触发额外权限检查,增加失败概率
调试连不上时,该看哪几条命令?
别只盯着 VSCode 输出面板。打开终端,用原生命令快速定位:
- 检查服务端 SSH 日志:
sudo tail -f /var/log/auth.log | grep 'sshd.*@host'(Ubuntu/Debian)或sudo journalctl -u sshd -f(systemd 系统) - 验证密钥是否被读取:
ssh -T -v user@host(看输出里有没有debug1: Offering public key: ...和debug1: Server accepts key) - 确认权限是否合规:
ls -ld ~ ~/.ssh ~/.ssh/authorized_keys,结果应类似:drwx------ 2 user user 4096 Jan 1 12:00 /home/user/.ssh<br>-rw------- 1 user user 392 Jan 1 12:00 /home/user/.ssh/authorized_keys
- 检查 SELinux(仅 RHEL/CentOS):
ls -Z ~/.ssh/authorized_keys,若 context 异常,运行restorecon -Rv ~/.ssh
权限和路径细节错一点,OpenSSH 就直接拒之门外 —— 它不报错,只沉默。所以每次连不上,先跑一遍 ls -ld,比重装插件快十倍。


















