WSL2环境下VSCode通过SSH连接EC2实例遇权限及连接问题
解决VSCode SSH连接EC2的权限问题及后续报错排查
问题背景
在VSCode中通过SSH连接EC2实例时,反复提示pem文件权限过于开放,但直接在终端执行ssh -i swayek.pem ec2-user@ec2-44-212-10-54.compute-1.amazonaws.com可正常连接。推测原因是VSCode默认使用Windows终端的SSH客户端,而非WSL2中的客户端,而密钥文件原本存放在WSL2环境中。将pem文件复制到Windows侧并执行icacls权限配置命令后,出现新的未知错误。
两种解决方案
方案一:让VSCode使用WSL2的SSH客户端
直接复用WSL2中已配置好权限的密钥,无需在Windows侧修改权限:
- 打开VSCode设置(快捷键
Ctrl+,),搜索remote.SSH.path - 将配置值改为WSL2的SSH调用路径,示例:
若需指定特定WSL发行版,可改为:C:\Windows\System32\wsl.exe sshwsl -d Ubuntu-22.04 ssh - 编辑VSCode的SSH配置文件(路径:
C:\Users\<你的Windows用户名>\.ssh\config),添加以下内容(替换对应路径和实例信息):Host ec2-instance HostName ec2-44-212-10-54.compute-1.amazonaws.com User ec2-user IdentityFile \\wsl$\Ubuntu-22.04\home\<你的WSL用户名>\.ssh\swayek.pem - 重启VSCode后尝试连接即可。
方案二:修复Windows侧pem文件的权限配置
若坚持使用Windows侧的密钥文件,重新执行正确的权限配置步骤:
- 打开管理员权限的PowerShell(右键开始菜单选择「Windows PowerShell(管理员)」)
- 切换到pem文件所在目录,示例:
cd C:\Users\<你的Windows用户名>\.ssh - 执行以下命令(替换
swayek.pem为你的实际文件名):# 重置文件权限 icacls .\swayek.pem /reset # 禁用权限继承并移除继承的权限 icacls .\swayek.pem /inheritance:r # 仅给当前用户添加读取权限 icacls .\swayek.pem /grant:r "$env:USERNAME:(R)" # 查看权限确认(应只有当前用户有读取权限) icacls .\swayek.pem - 编辑VSCode的SSH配置文件,指定Windows侧的密钥路径:
Host ec2-instance HostName ec2-44-212-10-54.compute-1.amazonaws.com User ec2-user IdentityFile C:\Users\<你的Windows用户名>\.ssh\swayek.pem - 若仍报错,检查VSCode的Remote-SSH扩展是否为最新版本,重启VSCode后重试。
常见新错误排查
- 权限修改失败:确保使用管理员PowerShell执行命令,普通权限无法修改文件的核心权限。
- 路径不匹配:确认命令中的文件名和实际复制到Windows侧的pem文件名一致(比如你复制的是
swayek.pem,但命令里写的是aws-ec2-key.pem)。 - SSH配置错误:检查配置文件中的
IdentityFile路径是否正确,路径分隔符在Windows配置中用\,不要用Linux的/。
内容的提问来源于stack exchange,提问作者Eric Andre
相关产品推荐
相关产品推荐

