VSCode 通过 Remote - SSH 插件调用本地 SSH 客户端,配置公钥认证后可实现免密登录远程服务器。适用场景为本地开发机频繁连接同一台 Linux 服务器,风险边界是私钥文件权限必须限制为 600 且不能泄露。
先说结论:生成 SSH 密钥对并将公钥部署到服务器,VSCode 即可自动调用密钥完成认证。
- 适合:本地开发机连接远程 Linux 环境,需频繁编辑文件或调试代码。
- 先准备:安装 VSCode Remote - SSH 插件,确保本地已安装 OpenSSH 客户端。
- 验收:VSCode 连接远程文件夹时不再弹出密码输入框,终端会话直接建立。
命令速用版
以下命令在本地终端执行,用于生成密钥并复制到服务器。
ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id user@hostname若本地无 ssh-copy-id 命令,需手动将公钥内容追加到服务器 ~/.ssh/authorized_keys 文件。
为什么会这样
SSH 协议支持公钥认证机制,VSCode 本身不存储密码,而是调用系统 SSH 客户端进行连接。
本地保存私钥,服务器保存公钥。连接时服务器用公钥加密挑战字符串,本地用私钥解密回应,验证通过则无需输入账户密码。VSCode 的 Remote - SSH 插件本质是封装了 SSH 命令行工具,继承本地 SSH 配置。
分步处理
步骤 1:生成 SSH 密钥对
在本地终端运行生成命令,建议选用 ed25519 算法,安全性高于 rsa。
ssh-keygen -t ed25519 -C "comment"按提示保存路径,默认位于 ~/.ssh/id_ed25519,私钥权限自动设为 600。
步骤 2:将公钥部署到服务器
使用 ssh-copy-id 命令自动传输公钥,需输入一次服务器密码。
ssh-copy-id user@hostname若无此命令,手动查看本地公钥 cat ~/.ssh/id_ed25519.pub,复制内容到服务器 ~/.ssh/authorized_keys 末尾。
步骤 3:配置 VSCode Remote SSH
安装 Microsoft 官方 Remote - SSH 插件,点击左下角绿色图标,选择 Connect to Host。
若未自动识别,需在配置文件 ~/.ssh/config 中添加 Host 信息,指定 IdentityFile 路径。
怎么验证是否生效
在 VSCode 中选择远程主机连接,观察左下角状态栏是否显示远程主机名且无需密码弹窗。
本地终端执行 ssh -v user@hostname,查看 debug 日志中 Authentication 部分是否显示 publickey 成功。
debug1: Next authentication method: publickey
debug1: Successfully authenticated.常见坑
私钥权限过于开放:SSH 客户端拒绝加载权限大于 600 的私钥文件,需运行 chmod 600 ~/.ssh/id_ed25519 修复。
服务器禁止公钥登录:服务器 /etc/ssh/sshd_config 中 PubkeyAuthentication 必须设为 yes,PasswordAuthentication 可设为 no 以强制密钥登录。
配置文件路径错误:VSCode 在 Windows 下可能读取的是 PowerShell 用户目录下的 config 文件,需确认插件设置中的 Config File Path。
常见问题
连接时仍然提示输入密码怎么办
检查服务器 ~/.ssh/authorized_keys 文件权限是否为 600 或 644,且属主正确。
确认本地私钥路径是否在 SSH config 文件中正确指定,或尝试 ssh -i 参数手动指定密钥测试。
应该使用 rsa 还是 ed25519 密钥
优先使用 ed25519,生成速度更快且安全性更高,除非旧版服务器不支持该算法。
VSCode 在哪里修改 SSH 配置文件
点击左下角远程图标,选择 Settings,或直接编辑本地用户目录下的 .ssh/config 文本文件。
参考来源
- Microsoft Learn, "Remote development over SSH", https://code.visualstudio.com/docs/remote/ssh
- OpenSSH Manual, "ssh-keygen", https://man.openbsd.org/ssh-keygen