VSCode远程开发免密码登录

VS Code 远程开发每次都要输入密码?使用 SSH 密钥解决

使用 VS Code 的 Remote - SSH 连接 Linux 服务器时,每次重新打开编辑器都要输入服务器密码。想实现免密码连接,可以配置 SSH 密钥认证:私钥留在 Windows 本机,公钥安装到服务器。

本文记录一次实际排查过程。最终发现,本机已经正确使用密钥,但服务器没有接受对应公钥。重新安装公钥并修正权限后,连接恢复正常。

环境与示例

  • 本机:Windows,使用 PowerShell。
  • 远程:Linux,使用 VS Code Remote - SSH。
  • 示例服务器:203.0.113.10,请替换为自己的地址。
  • SSH 端口:23,请替换为实际端口;默认通常是 22。
  • 登录用户:root,请替换为实际用户。

以下 Windows 命令都在本机 PowerShell 执行,不是在 VS Code 的远程终端执行。

1. 生成 SSH 密钥

先检查是否已有密钥:

powershell 复制代码
Test-Path "$env:USERPROFILE\.ssh\id_ed25519"
Test-Path "$env:USERPROFILE\.ssh\id_ed25519.pub"

如果两个结果都是 True,可以使用已有密钥。如果没有密钥,执行:

powershell 复制代码
ssh-keygen -t ed25519

保存位置可以直接按回车,使用默认路径。若提示文件已存在,不要直接覆盖,以免影响其他服务器的登录,如下图。

生成后会得到两个文件:

文件 用途
id_ed25519 私钥,保留在本机,不要上传或公开
id_ed25519.pub 公钥,添加到服务器

生成时还可以设置私钥口令。设置口令后,可通过后面的 ssh-agent 步骤减少重复输入;留空则不需要解锁私钥,但任何能读取该私钥的人都可能使用它登录。

2. 将公钥安装到服务器

在 Windows PowerShell 执行(记得改端口和后面的root@203.0.113.10):

powershell 复制代码
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh -p 23 -o PubkeyAuthentication=no -o PreferredAuthentications=password root@203.0.113.10 'umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys; chown "$(id -un):$(id -gn)" ~/.ssh ~/.ssh/authorized_keys'

输入一次服务器密码。首次连接如果出现主机指纹确认,应确认服务器身份后再继续。

这条命令会:

  1. 使用服务器密码登录,避免已有密钥干扰这次安装。
  2. 创建当前登录用户的 ~/.ssh 目录。
  3. 将本机公钥追加到 ~/.ssh/authorized_keys,保留原有公钥。
  4. 将目录权限设为 700、文件权限设为 600。
  5. 将目录和文件的所有者设为当前登录用户及其主组。

注意 -p 23:如果服务器使用自定义 SSH 端口,上传公钥和测试连接时都要指定同一个端口,我这里服务器指定的端口是23。

如果服务器禁用了密码登录,需要通过已有登录方式或管理控制台安装公钥。

3. 配置 VS Code 的 SSH 连接

在 VS Code 中按 F1,搜索 Remote-SSH: Open SSH Configuration File... (输入前面几个其实就会跳出来了),选择实际使用的 SSH 配置文件,通常是 Windows 用户目录中的 .ssh/config。

点击第一个进去之后,将对应服务器配置为:

sshconfig 复制代码
Host my-server
    HostName 203.0.113.10
    Port 23
    User root
    IdentityFile C:/Users/你的Windows用户名(我的是LZJ)/.ssh/id_ed25519
    IdentitiesOnly yes

将 IdentityFile 替换成真实的私钥路径。也可以使用:

sshconfig 复制代码
    IdentityFile ~/.ssh/id_ed25519

其中,Host 是 VS Code 中显示的连接名称,HostName 是服务器地址。IdentityFile 指向私钥,不是 .pub 公钥文件。

保存后执行 Remote-SSH: Connect to Host... ,选择 my-server。

4. 如果私钥设了口令,配置 ssh-agent

服务器密码和私钥口令是两回事。密钥认证成功后,如果仍提示 Enter passphrase for key ...,要求输入的是私钥口令。

以管理员身份打开 Windows PowerShell,执行:

powershell 复制代码
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent

然后回到普通 PowerShell,以平时使用 VS Code 的 Windows 账户执行:

powershell 复制代码
ssh-add "$env:USERPROFILE\.ssh\id_ed25519"

输入一次私钥口令,再检查密钥是否已加入:

powershell 复制代码
ssh-add -l

如果私钥没有口令,可以跳过本节。

5. 先验证命令行,再连接 VS Code

在 Windows PowerShell 执行(记得改端口和后面的root@203.0.113.10):

powershell 复制代码
ssh -p 23 -i "$env:USERPROFILE\.ssh\id_ed25519" -o PreferredAuthentications=publickey root@203.0.113.10

这条命令只尝试公钥认证。如果能够登录且没有要求服务器密码,就说明密钥登录已经成功。执行 exit 返回本机后,再重新连接 VS Code。

排查:为什么配置密钥后仍要求密码?

先确认是哪种密码

提示 含义
root@服务器地址 的密码 或 password 仍要求服务器账户密码,需要检查公钥认证
Enter passphrase for key ... 要求解锁本机私钥,可检查 ssh-agent

用日志判断失败发生在哪里

执行(记得改端口和后面的root@203.0.113.10):

powershell 复制代码
ssh -vv -p 23 -i "$env:USERPROFILE\.ssh\id_ed25519" -o PreferredAuthentications=publickey root@203.0.113.10

本次问题的日志中出现了:

text 复制代码
Offering public key: ...id_ed25519...
Authentications that can continue: publickey,password
...
Permission denied (publickey,password).

这表示客户端已经找到密钥并向服务器发送公钥,但服务器没有接受。此时应检查服务器上的公钥、文件权限和认证策略。

本次通过第 2 步重新安装当前公钥并修正权限后解决。由于该步骤同时更新了公钥和权限,无法仅凭日志确定原先究竟是哪一项有误。

重新安装后仍失败

先通过密码登录服务器(记得改端口和后面的root@203.0.113.10):

powershell 复制代码
ssh -p 23 -o PubkeyAuthentication=no -o PreferredAuthentications=password root@203.0.113.10

然后在 Linux 服务器上检查权限:

bash 复制代码
ls -ld ~ ~/.ssh ~/.ssh/authorized_keys

确认 .ssh 和 authorized_keys 属于登录用户,目录权限通常为 700,文件权限为 600,用户主目录不应允许其他用户随意写入。

管理员还可以查看 SSH 的基础有效配置:

bash 复制代码
sshd -T | grep -E '^(pubkeyauthentication|permitrootlogin|authorizedkeysfile|authenticationmethods|strictmodes) '

主要关注:

  • pubkeyauthentication 是否允许公钥认证。
  • authorizedkeysfile 是否指向实际安装公钥的位置。
  • 使用 root 时,permitrootlogin 是否允许公钥登录;prohibit-password 允许 root 使用公钥登录。
  • authenticationmethods 是否要求公钥之外再提供密码或其他认证。

如果服务器配置了 Match 条件,实际连接的设置可能不同,需要结合连接用户、客户端地址及服务器认证日志检查。不要为了免密码登录直接关闭权限检查或放宽服务器认证策略。

命令行能登录,但 VS Code 仍要求密码

检查 VS Code 是否使用了相同的服务器地址、端口、用户和私钥。通过 Remote-SSH: Show Log 查看连接日志,确认它实际使用的 SSH 程序和配置文件;如果设置过 remote.SSH.path 或 remote.SSH.configFile,也需要核对。

本次解决结果

问题的关键证据是客户端日志中的 Offering public key,以及服务器随后继续要求其他认证。重新安装对应公钥、修正服务器目录和文件权限后,公钥登录成功,VS Code 重新连接也无需输入服务器密码。

参考资料

相关推荐
?? Daisy2 小时前
Codex 接入第三方 API:CLI 与编辑器扩展的配置方法(2026-10)
编辑器
kite01211 天前
TraeCode 与 TraeWork 合并:AI 时代 IDE 的三种形态与未来开发工具
ide·ade·traework·traecode
weixin_461769401 天前
VS Code 中创建 Jupyter 文件(.ipynb)
ide·python·jupyter
浪潮IT馆1 天前
Android Studio 非最新版本下载安装教程
android·ide·android studio
初雪云1 天前
UniApp 云打包拿到 IPA 后,真正的发布工作才刚开始
ios·自动化·编辑器·产品经理·iphone
慧都小项1 天前
组件改名,引用同步更新:WebStorm的重构能力用在哪里?
ide·重构·webstorm
幸运小圣2 天前
Buffer 新手入门【Node.js】
node.js·编辑器·vim
*wait for?2 天前
VScode使用uv-创建python虚拟环境
ide·vscode·编辑器
lzx_0022 天前
Linux 开发工具(二) 简单认识一下编辑器 —— vim
linux·编辑器·vim