VSCode用ssh连接捏造机Ubuntu

[复制链接]
发表于 2026-10-3 11:41:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

为什么 VSCode 要连虚拟机

本地写、远端跑是当前很主流的开发姿势:IDE 留在自己的 Windows/Mac 上,代码和运行时在 Linux 虚拟机里。VSCode 的 Remote-SSH 就是干这个的——远程编辑和本地没有手感差别,终端、调试、Git 全在远端执行。

先理解 SSH 密钥交换在干什么

SSH(Secure Shell)是加密加认证的网络协议。握手过程用到了椭圆/模幂运算,简化成这样:

  1. 服务器天生素数 G、P 和自己的私钥 b,算出公钥 y = (G^b) mod P。
  2. 服务器把 G、P、y 发给客户端。
  3. 客户端天生私钥 a,算出公钥 x = (G^a) mod P。
  4. 客户端把 x 发给服务器。
  5. 服务器算 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企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表