vscode通过remote-ssh连接远程服务器安全且主流,前提是正确配置ssh密钥认证、禁用密码登录、严格管控sshd_config,并确保私钥权限为600;依赖系统ssh命令与密钥体系,不走vscode自建通道。

VSCode 通过 Remote-SSH 扩展连接远程服务器是安全且主流的做法,前提是 SSH 服务本身配置得当——它不依赖密码明文传输,也不走 VSCode 自建通道,而是复用系统级 ssh 命令和密钥体系。
确保本地 SSH 密钥已生成并添加到 agent
远程登录安全性的第一道门槛不在 VSCode,而在你的本地 SSH 密钥管理。如果还在用密码登录,Remote-SSH 会反复弹窗、无法保存凭据,且不满足“安全编辑”前提。
- 检查是否有可用密钥:
ls -l ~/.ssh/id_rsa.pub(或id_ed25519.pub) - 若无,运行
ssh-keygen -t ed25519 -C "your_email@example.com"生成新密钥(优先选ed25519) - 启动 agent 并加载密钥:
eval "$(ssh-agent -s)"+ssh-add ~/.ssh/id_ed25519 - 把公钥复制到目标服务器:
ssh-copy-id user@host(失败时手动追加到~/.ssh/authorized_keys)
配置 Remote-SSH 的 config 文件避免硬编码敏感信息
Remote-SSH 默认读取 ~/.ssh/config,这是最干净、最可复用的配置方式。直接在 VSCode 连接面板里输 host/IP,容易泄露用户名、端口甚至跳转逻辑。
- 在
~/.ssh/config中添加类似块:
Host my-prod-server
HostName 203.0.113.42
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519
ForwardAgent yes
StrictHostKeyChecking no
-
StrictHostKeyChecking no仅建议在受控内网环境启用;生产环境应设为ask或提前用ssh-keyscan预置指纹 - 避免在 config 中写
ProxyCommand而不测试通路——VSCode 不会提示代理链失败的具体环节,只卡在“正在建立连接”
禁用密码认证并关闭 PermitRootLogin
VSCode 本身不控制服务器 SSH 安全策略,但如果你连的是自己管理的机器,必须确认 /etc/ssh/sshd_config 已收紧权限。否则即使本地用了密钥,服务器仍可能接受暴力密码尝试。
- 确认以下配置项已生效(改完需
sudo systemctl restart sshd):
PubkeyAuthentication yes PasswordAuthentication no PermitRootLogin no AllowUsers deploy www-data
-
AllowUsers比DenyUsers更可靠,明确放行编辑所需账户 - 不要依赖 VSCode 界面里的“保存密码”勾选项——那只是缓存连接参数,不改变认证方式
注意 VSCode Server 的自动安装路径与权限问题
首次连接时,Remote-SSH 会在远程用户家目录下解压并运行一个轻量 vscode-server,它默认使用当前用户的权限。如果项目文件属主是 www-data 或其他系统用户,直接编辑会因权限不足报错 EPERM: operation not permitted。
- 常见表现:保存文件失败、终端中
git commit提示权限拒绝、扩展如Prettier无法格式化 - 临时解决:在远程终端中
sudo chown -R $USER:$USER /path/to/project(仅限开发机) - 长期方案:用
sudo -u www-data code --no-sandbox --user-data-dir=/tmp/vscode-root启动(需额外配置Remote-SSH的remote.SSH.remotePlatform和自定义serverInstallPath) - 更稳妥做法:在远程机器上用目标用户(如
www-data)生成专属 SSH 密钥,并单独配置~www-data/.ssh/config供 VSCode 切换使用
真正决定安全边界的不是 VSCode 界面有多酷,而是 ssh -T user@host 能否静默通过、sshd_config 是否关闭了所有非必要入口、以及你有没有把私钥文件权限设为 600。这些点漏掉任意一个,远程编辑就只是方便,谈不上安全。











