VSCode通过SSH连接VMware虚拟机/WSL2

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

SSH 远程开发完整配置手册

覆盖 VMware 虚拟机 + WSL2 双场景 | 含原理详解 + 排错指南 + 最佳实践


一、SSH 远程开发核心原理

1.1 基础通信模型

SSH(Secure Shell) 是一种加密网络协议,为远程登录和其他网络服务提供安全传输通道。VSCode/Trae IDE 的 Remote-SSH 基于此实现:

本地 IDE(客户端) ←→ 加密隧道(SSH协议) ←→ 远程环境(服务端)
    ↓                                            ↓
  编辑UI/交互                              代码执行/编译
  • 客户端-服务器模型:本地 IDE 作为 SSH 客户端,远程环境(虚拟机/WSL)运行 OpenSSH 服务端
  • 加密传输:所有数据(代码、终端、文件)全程 AES 加密,防止中间人攻击
  • 端口转发:自动实现本地端口与远程端口映射,支持调试、Web 服务预览

1.2 两种认证方式对比

认证方式安全性便利性适用场景
密码认证低(易暴力破解)低(每次输密码)临时连接、测试环境
密钥认证(IdentityFile)极高(非对称加密)极高(免密自动登录)日常开发、生产环境

二、VMware 虚拟机 SSH 完整配置

2.1 虚拟机端配置(Ubuntu)

步骤1:安装并启用 SSH 服务
# 更新软件源
sudo apt update

# 安装 OpenSSH 服务端
sudo apt install openssh-server -y

# 启动 SSH 服务
sudo systemctl start ssh

# 设置开机自启
sudo systemctl enable ssh

# 验证服务状态(active(running) 即为正常)
sudo systemctl status ssh
步骤2:网络配置
  • VMware 网络模式推荐使用 NAT 模式(桥接模式也可)
  • 若需要宿主机外的设备访问,需配置端口转发:将宿主机端口映射到虚拟机 22 端口

2.2 宿主机与 IDE 配置

前置验证:Windows 侧 SSH 连通性测试
# 先在 PowerShell 验证,确保网络层通
ssh 用户名@虚拟机IP
VSCode/Trae IDE 连接步骤​​
  1. 获取虚拟机连接信息:
    # 虚拟机内执行,获取IP
    ip a
    
    # 获取用户名
    whoami
    
  2. IDE 内按 F1 → 输入 Remote-SSH: Connect to Host
  3. 输入连接格式:ssh 用户名@IP地址 即可

 ip a

whoami

可得:ssh book@192.168.32.130

填入即可

2.3 Windows SSH 权限问题修复

典型报错

Bad permissions. Try removing permissions for user: UNKNOWN\UNKNOWN
Bad owner or permissions on C:\Users\xxx\.ssh\config

修复步骤

  1. 打开 C:\Users\你的用户名\.ssh 文件夹
  2. 右键 config 文件 → 属性 → 安全 → 高级
  3. 点击 禁用继承 → 选择「删除所有继承的权限」
  4. 点击 添加 → 选择当前用户,授予「完全控制」权限
  5. 确认文件所有者为当前用户,如不是则修改
  6. 重启 IDE 后重试连接

三、WSL2 SSH 专项配置(当前环境)

✅ 推荐方案:SSH 连接是目前 Trae/Cursor 等 AI 原生 IDE 连接 WSL2 最稳定的方案,彻底解决原生 WSL 插件的断连、鼠标错位问题

3.1 WSL2 端配置(Ubuntu 24.04)

步骤1:安装 SSH 并配置端口
# 安装 OpenSSH
sudo apt update && sudo apt install -y openssh-server

# 创建自定义配置(优先级最高,不被系统更新覆盖)
sudo tee /etc/ssh/sshd_config.d/99-custom.conf << EOF
Port 2222                          # 避开Windows默认22端口冲突
ListenAddress 0.0.0.0              # 监听所有IPv4地址
PasswordAuthentication yes         # 允许密码认证(配置密钥后可关闭)
PermitRootLogin no                 # 禁止root直接登录
EOF

# Ubuntu 24.04 专属:Socket 激活必须重载
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh.service

# 验证端口监听成功(看到 :2222 即为正常)
sudo ss -tulpn | grep sshd
步骤2:配置开机自启

编辑 /etc/wsl.conf 确保 systemd 开启:

[boot]
systemd=true
command="systemctl start ssh.socket ssh.service"

[network]
generateResolvConf=false

执行 wsl --shutdown 重启 WSL 生效。

3.2 Windows 侧 SSH 配置

编辑 C:\Users\你的用户名\.ssh\config

# WSL2 RK3562 开发环境
Host wsl-rk3562
    HostName 127.0.0.1          # 关键:强制IPv4,避开Trae IPv6 bug
    Port 2222                    # 与WSL内配置一致
    User luo                     # WSL用户名
    IdentityFile C:\Users\27969\.ssh\id_ed25519  # 私钥路径
    ForwardAgent yes             # 开启SSH代理转发
    ServerAliveInterval 60       # 60秒发一次心跳防断连
    ServerAliveCountMax 3        # 3次无响应断开
    AddressFamily inet           # 强制只用IPv4协议

3.3 配置免密登录

# 1. Windows侧生成密钥(已有可跳过)
ssh-keygen -t ed25519

# 2. 将公钥同步到WSL
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh luo@127.0.0.1 -p 2222 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

# 3. 验证免密(无需输入密码即为成功)
ssh luo@127.0.0.1 -p 2222


四、核心配置项深度解析

4.1 IdentityFile 深度讲解

这是 SSH 密钥认证的核心配置,也是免密登录的关键

什么是 IdentityFile?

IdentityFile 指定 SSH 客户端连接时使用的私钥文件路径,对应非对称加密体系中的「私钥」,与远程服务器 ~/.ssh/authorized_keys 中保存的「公钥」配对使用。

为什么必须配置 IdentityFile?
作用详细说明
免密自动登录IDE 后台自动使用私钥认证,无需每次输入密码,AI 执行任务时无需人工干预
安全性提升私钥仅保存在本地,网络传输中永不泄露;配合强密码可抵御暴力破解
自动化支持AI 智能体、脚本、CI/CD 可无人工介入完成 SSH 连接,是 Skill 链路自动化的基础
多环境隔离不同 Host 可配置不同 IdentityFile,实现多服务器/多环境权限隔离
工作原理(非对称加密认证流程)
1. 客户端 → 服务器:我想用密钥认证,这是我的公钥指纹
2. 服务器 → 检查 authorized_keys:有这个公钥,生成随机数用公钥加密后发回
3. 客户端 → 用本地 IdentityFile(私钥)解密随机数,发回给服务器
4. 服务器 → 验证解密正确,认证通过,建立连接
为什么权限要求这么严格?

SSH 有内置安全机制:如果私钥文件能被其他用户读取,会直接拒绝使用

  • Linux 下私钥权限必须是 600(仅所有者可读可写)
  • Windows 下必须仅当前用户拥有权限,继承的其他用户权限必须删除
  • 这是为了防止恶意用户窃取你的私钥冒充身份
密钥类型选择建议
密钥类型安全性性能推荐度说明
ed25519⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐✅ 首选现代算法,密钥短、速度快、安全性极高
RSA 4096⭐⭐⭐⭐⭐⭐⭐⚠️ 兼容用传统算法,兼容性好但体积大、速度慢
RSA 2048⭐⭐⭐⭐❌ 不推荐安全性已不足

五、常见问题与排错指南

5.1 Trae IDE WSL 连接超时(本次遇到的问题)

现象:PowerShell 能连,Trae 报 connect to address ::1 port 2222: Connection timed out

  • 根因:Trae SSH 客户端优先解析 localhost 为 IPv6,WSL 默认不支持 IPv6 localhost 转发
  • 解决方案:SSH 配置写 HostName 127.0.0.1 + AddressFamily inet 强制 IPv4

5.2 端口监听不生效

现象ss -tulpn | grep :2222 无输出

  • Ubuntu 24.04 必须执行 systemctl daemon-reload 后再重启 ssh.socket
  • 检查是否有其他进程占用端口:sudo lsof -i :2222

5.3 密钥认证不生效,仍要输密码

  1. 检查 WSL 内权限:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
  2. 检查公钥是否完整粘贴,无多余换行或空格
  3. 查看 SSH 日志:sudo journalctl -u ssh -f 看具体拒绝原因

六、安全最佳实践

  1. 生产环境关闭密码认证:配置完密钥后,设置 PasswordAuthentication no
  2. 定期轮换密钥:重要环境每 3-6 个月更换一次密钥对
  3. 私钥加密保护:生成密钥时设置强密码,即使被盗也无法直接使用
  4. 使用 Fail2ban:防止暴力破解,多次失败自动封禁 IP
  5. 最小权限原则:不同项目/环境使用不同的密钥对,避免一钥通吃

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值