目录
本文介绍VS Code通过SSH协议访问VMware虚拟机中的工作区。
操作系统
主机使用Win11,虚拟机使用Linux Ubuntu 22.04。
网络环境
使用SSH建立VSCode与虚拟机的连接需要配置网络环境。
VMware中虚拟机网络连接提供了五个选项,分别是桥接模式、NAT模式、仅主机模式、自定义、LAN区段。VMware中虚拟机默认通过NAT连接网络。
NAT模式
NAT(Network Address Translation),是指网络地址转换,1994年提出的。NAT是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开发的技术。
VMware在主机上通过应用程序提供NAT服务。
对应NAT模式图中的内容可以在网络适配器中找到Vmnet8虚拟网卡。
NAT模式服务设置在VMware中配置。
NAT网络环境配置
此处NAT不添加配置,使用默认配置。
查看NAT中的网络地址
配置主机和虚拟机网络需要:
IP地址、子网掩码、网关IP。
DNS。
在虚拟网络编辑器中找到并点击NAT设置。
子网掩码、网关IP。
找到并点击DHCP设置。
找到IP地址范围。
由以上操作找到了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——右键单击——属性。
找到
Internet协议版本 4(TCP/IPv4)
,点击属性。
配置IP地址、子网掩码、默认网关、DNS。
虚拟机网络配置
虚拟机网络配置介绍两种方式 :设置界面配置和修改配置文件。两种方式配置等效。
通过设置界面配置
打开设置。
找到网络——有线——设置。
点击IPv4。
配置IPv4。
配置完成后重启网络配置。
通过配置文件配置
配置文件目录 :/etc/netplan/
ls /etc/netplan/
# 01-network-manager-all.yamlsudovim /etc/netplan/01-network-manager-all.yaml
文件内容。
# Let NetworkManager manage all devices on this systemnetwork:version:2renderer: 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
为网络接口名称。
/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
SSH认证
SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录和其他安全网络服务。它提供了一种加密的、安全的替代方法,用于远程登录到另一台计算机,确保数据在传输过程中的安全性和完整性。SSH协议在七层网络模型的应用层运行,通常基于TCP协议,但也可以利用UDP等协议的特性,以提供高效、有序的数据传输。
SSH客户端(主机)登录SSH服务端(虚拟机)需要认证,通过认证的服务端才能通过SSH登录客户端。此处介绍密钥对认证(推荐)和用户名+密码认证。
密钥对认证
密钥对指的是由特定的身份验证协议使用的公钥和私钥文件。
SSH 公钥身份验证使用不对称加密算法来生成两个密钥文件 – 一个为“私钥”文件,一个为“公钥”文件。 私钥文件等效于密码,在所有情况下都应当保护它们。 如果有人获取了你的私钥,则他们可以像你一样登录到你有权登录的任何 SSH 服务器。 公钥放置在 SSH 服务器上,并且可以共享,不会危害私钥的安全。
基于密钥的身份验证使 SSH 服务器和客户端能够将提供的用户名的公钥与私钥进行比较。 如果无法依据客户端私钥验证服务器端公钥,则身份验证失败。
用户名+密码认证
客户端(主机)登录服务端时(虚拟机)使用服务端的用户名+密码进行登录。
主机SSH配置
Windows 10及以上版本自带了OpenSSH客户端,无需额外安装。
配置认证方式
a)密钥对认证配置
以下使用到的Windows命令在PowerShell中执行。
若要使用基于密钥的身份验证,首先需要为客户端生成公钥/私钥对。ssh-keygen.exe 用于生成密钥文件,可以指定DSA、RSA、ECDSA 或 Ed25519 算法。 如果未指定算法,则使用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]-----+
在指定的路径生成了密钥对。
C:\Users\Administrator/.ssh/id_ed25519
C:\Users\Administrator/.ssh/id_ed25519.pub
如果不指定算法,生成的密钥对名称是
id_rsa
和
id_rsa.pub
。
.pub
文件是公钥,没有扩展名的文件是私钥。
b)用户名+密码认证配置
主机无需配置。
虚拟机SSH配置
安装OpenSSH服务器软件包
安装OpenSSH服务器软件包。
sudo apt update
sudo apt install openssh-server
查看SSH服务是否正在运行
查看SSH服务是否正在运行。
sudo systemctl status ssh
如果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
文件中添加主机中生成的
.pub
key,并保存。
vim /home/[username]/.ssh/authorized_keys
b)用户名+密码认证配置
配置用户名+密码方式认证需修改SSH配置文件。
sudo vim /etc/ssh/sshd_config
shd_config
配置文件中的
PasswordAuthentication
是指通过SSH协议进行身份验证时是否允许使用密码认证。去掉
PasswordAuthentication
前面的
#
,保存文件。
连接SSH
从主机连接虚拟机SSH。
在主机PowerShell中输入以下命令。
ssh [username]@[host-ip-address]
[username]
是Ubuntu用户名,
[host-ip-address]
是Ubuntu服务器的IP地址。
VS Code配置
添加扩展
在VS Code 扩展(Ctrl+Shift+X)中搜索Remote。
安装
Remote - SSH
和
Remote Explorer
。
连接SSH
安装完成后找到远程资源管理器。
选择远程。
连接SSH可通过点击在配置文件中添加配置或新建连接两种方式。
方式1 配置文件中添加配置
选择配置文件路径。
此处显示的
C:\ProgramData\ssh\ssh_config
路径是全局路径,主机上登录的所有用户可使用此配置路径。其余路径为用户路径。
在配置文件中添加配置。
Host 192.168.37.129
HostName 192.168.37.129
User user0
保存后刷新,打开添加的连接。
如果使用用户名+密码认证,此处输入虚拟机用户登录密码。密钥对认证跳过此步。
查看显示已连接。
方式2 新建连接
点击新建远程。
输入ssh连接命令,Enter。
选择配置保存路径。
配置已添加。
保存后刷新,打开添加的连接。
使用用户名+密码认证,输入虚拟机用户登录密码。密钥对认证跳过此步。
查看显示已连接。
添加工作区目录
打开虚拟机目录。
选择工作区目录。
点击是。
资源管理器中,虚拟机中的目录已被打开。
VS Code 连接虚拟机中的工作区配置完成。
参考
vmware虚拟机NAT模式、桥模式、主机模式原理与区别_vmware nat模式-CSDN博客
OpenSSH for Windows 中基于密钥的身份验证 | Microsoft Learn
版权归原作者 _integer 所有, 如有侵权,请联系我们删除。