本文介绍VS Code通过SSH协议访问VMware虚拟机中的工作区。

操作系统

主机使用Win11,虚拟机使用Linux Ubuntu 22.04。

网络环境

使用SSH建立VSCode与虚拟机的连接需要配置网络环境。
VMware中虚拟机网络连接提供了五个选项,分别是桥接模式NAT模式仅主机模式自定义LAN区段。VMware中虚拟机默认通过NAT连接网络。
image.png

NAT模式

NAT(Network Address Translation),是指网络地址转换,1994年提出的。NAT是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开发的技术。
NAT1.jpg
VMware在主机上通过应用程序提供NAT服务。
image.png
对应NAT模式图中的内容可以在网络适配器中找到Vmnet8虚拟网卡。
image.png
NAT模式服务设置在VMware中配置。
image.png
image.png

NAT网络环境配置

此处NAT不添加配置,使用默认配置。

查看NAT中的网络地址

配置主机和虚拟机网络需要:

IP地址、子网掩码、网关IP。
DNS。

虚拟网络编辑器中找到并点击NAT设置
image.png
子网掩码网关IP
image.png
找到并点击DHCP设置
image.png
找到IP地址范围。
image.png
由以上操作找到了IP地址范围网关IP子网掩码

IP地址范围(起始IP地址——结束IP地址):192.168.37.128——192.168.37.254
网关IP :192.168.37.2
子网掩码:255.255.255.0

DNS服务器设置为固定IP。

DNS IP:8.8.8.8

主机网络地址配置

IP地址 :192.168.37.128
网关IP :192.168.37.2
子网掩码 :255.255.255.0
DNS :8.8.8.8

虚拟机网络地址配置

IP地址 :192.168.37.129
网关IP :192.168.37.2
子网掩码 :255.255.255.0
DNS :8.8.8.8

主机网络配置

主机控制面板中找到VMnet8——右键单击——属性
image.png
找到Internet协议版本 4(TCP/IPv4),点击属性
image.png
配置IP地址子网掩码默认网关DNS
image.png

虚拟机网络配置

虚拟机网络配置介绍两种方式 :设置界面配置修改配置文件。两种方式配置等效。

通过设置界面配置

打开设置
image.png
找到网络——有线——设置
image.png
点击IPv4
image.png
配置IPv4。
image.png
配置完成后重启网络配置。
image.png

通过配置文件配置

配置文件目录 :/etc/netplan/

ls /etc/netplan/
# 01-network-manager-all.yaml
sudo vim /etc/netplan/01-network-manager-all.yaml

文件内容。

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enps33:
      dhcp4: no
      addresses:
        - 192.168.37.129/24
      routes:
        - to: 0.0.0.0/0
          via: 192.168.37.2
      nameservers:
          addresses: [8.8.8.8]

ens33为网络接口名称。
image.png
/24是子网掩码(相当于255.255.255.0)。
routes关键字被用来定义一个到达任意地址(0.0.0.0/0)的默认路由,其网关地址是192.168.37.2
到达任意地址的默认路由routes字段也可以使用以下配置。

routes:
- to: default
via: 192.168.37.2

nameservers下的addresses关键字用来定义DNS服务器地址。‌
应用配置。

sudo netplan apply

查看配置。

ifconfig 或 ip addr show

image.png

SSH认证

SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录和其他安全网络服务。它提供了一种加密的、安全的替代方法,用于远程登录到另一台计算机,确保数据在传输过程中的安全性和完整性。SSH协议在七层网络模型的应用层运行,通常基于‌TCP协议,但也可以利用UDP等协议的特性,以提供高效、有序的数据传输。‌
SSH客户端(主机)登录SSH服务端(虚拟机)需要认证,通过认证的服务端才能通过SSH登录客户端。此处介绍密钥对认证(推荐)和用户名+密码认证

密钥对认证

密钥对指的是由特定的身份验证协议使用的公钥私钥文件。
SSH 公钥身份验证使用不对称加密算法来生成两个密钥文件 – 一个为“私钥”文件,一个为“公钥”文件。 私钥文件等效于密码,在所有情况下都应当保护它们。 如果有人获取了你的私钥,则他们可以像你一样登录到你有权登录的任何 SSH 服务器。 公钥放置在 SSH 服务器上,并且可以共享,不会危害私钥的安全。
基于密钥的身份验证使 SSH 服务器和客户端能够将提供的用户名的公钥与私钥进行比较。 如果无法依据客户端私钥验证服务器端公钥,则身份验证失败。

用户名+密码认证

客户端(主机)登录服务端时(虚拟机)使用服务端的用户名+密码进行登录。

主机SSH配置

Windows 10及以上版本自带了OpenSSH客户端,‌无需额外安装。‌

配置认证方式

a)密钥对认证配置

以下使用到的Windows命令在PowerShell中执行。
若要使用基于密钥的身份验证,首先需要为客户端生成公钥/私钥对ssh-keygen.exe 用于生成密钥文件,可以指定DSARSAECDSAEd25519 算法。 如果未指定算法,则使用RSA。 应使用强算法和密钥长度。
使用Ed25519算法生成密钥对文件。

ssh-keygen -t ed25519

PS C:\Users\Administrator> ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\Administrator/.ssh/id_ed25519):  # 密钥对保存路径
Enter passphrase (empty for no passphrase):				# 输入密码,空表示不设置密码
Enter same passphrase again:											# 确认密码
Your identification has been saved in C:\Users\Administrator/.ssh/id_ed25519
Your public key has been saved in C:\Users\Administrator/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:pt/THqXdd7ACoW20Ay49UqsBLi2SqMyief3KaDv6KSY [username]@[LOCAL-HOSTNAME]
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|                 |
|    .   o o      |
|.. o . + * o     |
|+ o o + S *   o  |
|+. o   B o o + + |
|oo .  o    .+ o +|
|Eo++.  . .. .o  o|
|**=ooo. . .o.    |
+----[SHA256]-----+

在指定的路径生成了密钥对。
image.png

C:\Users\Administrator/.ssh/id_ed25519
C:\Users\Administrator/.ssh/id_ed25519.pub

如果不指定算法,生成的密钥对名称是id_rsaid_rsa.pub
.pub文件是公钥,没有扩展名的文件是私钥。

b)用户名+密码认证配置

主机无需配置。

虚拟机SSH配置

安装OpenSSH服务器软件包

安装OpenSSH服务器软件包。

sudo apt update

sudo apt install openssh-server

查看SSH服务是否正在运行

查看SSH服务是否正在运行。

sudo systemctl status ssh

image.png

如果SSH服务没有自动启动,手动启动:
sudo systemctl start ssh

配置SSH服务设置为开机启动

配置SSH服务设置为开机启动。

sudo systemctl enable ssh

配置SSH服务器设置

配置SSH服务器设置,编辑 /etc/ssh/sshd_config 文件。

sudo vim /etc/ssh/sshd_config

如果修改了sshd_config文件,重启SSH服务,应用更改。

sudo systemctl restart ssh

设置防火墙允许SSH连接

设置防火墙允许SSH连接。

sudo ufw allow ssh

配置认证方式

a)密钥对认证配置

使用密钥对认证不用修改shd_config文件,保持openssh-server的默认配置即可。
需要将主机中生成的SSH公钥添加到虚拟机/home/[username]/.ssh/authorized_keys文件中。
/home/[username]/.ssh/authorized_keys文件中添加主机中生成的.pubkey,并保存。

vim /home/[username]/.ssh/authorized_keys

image.png

b)用户名+密码认证配置

配置用户名+密码方式认证需修改SSH配置文件。

sudo vim /etc/ssh/sshd_config

shd_config配置文件中的PasswordAuthentication是指通过SSH协议进行身份验证时是否允许使用密码认证。去掉PasswordAuthentication前面的#,保存文件。
image.png

连接SSH

主机连接虚拟机SSH。
在主机PowerShell中输入以下命令。

ssh [username]@[host-ip-address]

[username] 是Ubuntu用户名,[host-ip-address] 是Ubuntu服务器的IP地址。

ssh user0@192.168.37.129

VS Code配置

添加扩展

在VS Code 扩展(Ctrl+Shift+X)中搜索Remote。
image.png
安装Remote - SSHRemote Explorer
image.png

连接SSH

安装完成后找到远程资源管理器
image.png
选择远程
image.png
连接SSH可通过点击在配置文件中添加配置新建连接两种方式。

方式1 配置文件中添加配置

image.png
选择配置文件路径。
image.png

此处显示的C:\ProgramData\ssh\ssh_config路径是全局路径,主机上登录的所有用户可使用此配置路径。其余路径为用户路径

在配置文件中添加配置。

Host 192.168.37.129
  HostName 192.168.37.129
  User user0

image.png
保存后刷新,打开添加的连接。
image.png
如果使用用户名+密码认证,此处输入虚拟机用户登录密码。密钥对认证跳过此步。
image.png
查看显示已连接。
image.png

方式2 新建连接

点击新建远程
image.png
输入ssh连接命令,Enter。

ssh user0@192.168.37.129

image.png
选择配置保存路径。
image.png
配置已添加。
image.png
保存后刷新,打开添加的连接。
image.png
使用用户名+密码认证,输入虚拟机用户登录密码。密钥对认证跳过此步。
image.png
查看显示已连接。
image.png

添加工作区目录

打开虚拟机目录。
image.png
选择工作区目录。
image.png
点击是。
image.png
资源管理器中,虚拟机中的目录已被打开。
image.png
VS Code 连接虚拟机中的工作区配置完成。


参考

vmware虚拟机NAT模式、桥模式、主机模式原理与区别_vmware nat模式-CSDN博客
OpenSSH for Windows 中基于密钥的身份验证 | Microsoft Learn

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐