马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
为什么 VSCode 要连虚拟机
本地写、远端跑是当前很主流的开发姿势:IDE 留在自己的 Windows/Mac 上,代码和运行时在 Linux 虚拟机里。VSCode 的 Remote-SSH 就是干这个的——远程编辑和本地没有手感差别,终端、调试、Git 全在远端执行。
先理解 SSH 密钥交换在干什么
SSH(Secure Shell)是加密加认证的网络协议。握手过程用到了椭圆/模幂运算,简化成这样:
- 服务器天生素数 G、P 和自己的私钥 b,算出公钥 y = (G^b) mod P。
- 服务器把 G、P、y 发给客户端。
- 客户端天生私钥 a,算出公钥 x = (G^a) mod P。
- 客户端把 x 发给服务器。
- 服务器算 K = (x^b) mod P,客户端算 K = (y^a) mod P。数学上两边得到的是同一个对称密钥 K,之后的通信就用它加密。
这一步解决的是「加密」,不解决「你连的是不是真服务器」——那靠的是 known_hosts 里的主机指纹校验,以及我们下面要做的免密登录(客户端公钥提前放好,服务器才知道允许谁进来)。
一、Ubuntu 端配置
1.1 先升级软件源
sudo apt update
sudo apt upgrade
不升级直接装经常报 E: Unable to locate package openssh-server。
1.2 安装 SSH 服务
sudo apt-get install -y openssh-server
1.3 启动并查看状态
sudo service ssh start
sudo service ssh status
1.4 加入开机自启
sudo systemctl enable ssh
1.5 拿 IP 地址
ip addr show
# 或老的
ifconfig
找到 inet 后面紧跟的地址,比如 192.168.11.128,这就是 VSCode 要填的主机。
桥接/NAT 模式下 IP 可能变,建议在虚拟机里配静态 IP,或者在VirtualBox/VMware 的网络设置里给这块网卡做 IP 绑定,避免每次重连都要重新查。
二、VSCode 侧配置
2.1 装插件
左侧扩展市场搜 Remote-SSH(微软官方),装完再顺手装 Remote-SSH: Editing Configuration 与 Remote Explorer。
2.2 写主机配置
按 F1,输入 Remote-SSH,选 Open SSH Configuration File,打开第一个(通常是 C:\Users\你的用户名\.ssh\config),按下面的格式填:
Host ubuntu-vm
HostName 192.168.11.128
User csdn
Port 22
IdentityFile C:\\Users\\你的用户名\\.ssh\\id_rsa
路径里的反斜杠要写双份(配置文件会被解析成转义),或者干脆用正斜杠 C:/Users/.../id_rsa,两种都能识别。
2.3 连接测试
重启 VSCode,点左侧 Remote Explorer 图标 → 切到 SSH 分组,选中刚配的主机点右侧连接图标。首次连接会问是否信任主机指纹,点 Continue;然后按提示输密码。
连上后点顶部菜单 Terminal → New Terminal,能开出来就是通了,而且这个终端跑在虚拟机里。
三、配置免密登录
每次连都输密码很烦,而且脚本化场景下根本没法交互。做法是把客户端公钥放到服务器授权列表里。
3.1 确认本机有 SSH 客户端
Windows 10/11 自带 OpenSSH。PowerShell 里执行:
ssh -V
# OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
如果提示不是内部命令,去「设置 → 应用 → 可选功能 → 添加功能」里装「OpenSSH 客户端」。
3.2 生成密钥对
ssh-keygen
一路回车即可(默认路径 C:\Users\你的用户名\.ssh\,类型_rsa,密码留空就能免密)。生成两个文件:id_rsa(私钥,绝不能外传)和 id_rsa.pub(公钥,要放服务器)。
3.3 把公钥拷到 Ubuntu
最省事的一条命令,会帮你建好目录并追加:
ssh-copy-id [email protected]
手动做也行:把 id_rsa.pub 的内容拷进服务器的 ~/.ssh/authorized_keys。注意 .ssh 是隐藏目录(SFTP 工具比如 Xftp 要到「工具 → 选项 → 常规」里勾选显示隐藏文件)。如果 .ssh 和 authorized_keys 都不存在,先自己 mkdir 一个:
mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys
编辑 authorized_keys 时,把 id_rsa.pub 的整行粘进去(公钥是一长串,别换行断掉),保存。
3.4 权限与重启服务
权限不对会直接拒绝公钥认证,这是 Linux 上最常被忽略的一条:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
sudo systemctl restart sshd
3.5 验证
ssh [email protected]
不再提示输密码直接进终端,就成了。重启 VSCode 后 Remote-SSH 也会自动走免密。
四、Xftp / Xshell 也能连
图形化工具走同样的协议。Xshell:新建会话 → 填名称、主机 IP、端口号 22、用户名密码,用户身份验证选「Public Key」时同样指定本地的 id_rsa。Xftp 同理,会话里选 SSH 认证方式。
实测 VSCode 和 Xshell 同时连同一台虚拟机不会冲突——SSH 本来就支持多连接并存,互不影响。
五、几个高频问题
- 连不上,一直让输密码:八成是
authorized_keys 权限不是 600,或 ~/.ssh 不是 700,sshd 会直接忽略这个文件。改完 systemctl restart sshd。
- 超时 / Connection refused:先确认
sshd 在监听(netstat -tlnp | grep :22)和防火墙放行了 22 端口(sudo ufw allow 22)。
- 局域网机器 ping 得通但 ssh 不通:虚拟机网络模式是 NAT 时,宿主机不一定能直连,改成桥接或配端口转发。
- 改了 IP 就连不上了:给虚拟机设静态 IP,或者在虚拟化平台里做 DHCP 地址绑定(MAC → IP)。
- known_hosts 指纹变了报 MITM 警告:重装系统或换 IP 后的正常现象,删掉
C:\Users\用户名\.ssh\known_hosts 里对应那行再连一次。
小结
VSCode 连虚拟机 Ubuntu 就三条主线:虚拟机装 openssh-server 并把 IP 固定下来 → VSCode 装 Remote-SSH 写 config 指向那个 IP → 把客户端公钥放进 ~/.ssh/authorized_keys 并设好 700/600 权限即免密。搞懂了密钥交换那套「两端各算同一个对称密钥」的机制,后面排查认证失败就不会只看密码对不对了。
qidao123.com企服评测-应用市场 编辑提示 |