【环境配置】【保姆级教程】VSCode SSH 连接 VMware虚拟机Linux Ubuntu 22.04 配置

本文介绍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

<think>好的,我现在需要帮助用户解决他们遇到的PowerShell脚本执行权限问题。用户得到的错误信息显示无法加载他们的profile.ps1文件,因为系统禁止运行脚本。错误中还提到了执行策略的问题,并指向了微软的相关文档链接。用户之前询问过关于VS Code运行C++的问题,现在转向了PowerShell的问题,可能他们在配置开发环境时遇到了这个障碍。 首先,我需要确认用户的问题是由于PowerShell的执行策略限制导致的。执行策略是PowerShell的安全机制,用来控制脚本的执行。默认情况下,Windows系统通常设置为“Restricted”,即允许任何脚本运行,包括用户自己编写的脚本。当用户尝试运行profile.ps1或其他脚本时,就会触发这个错误。 接下来,我应该考虑用户可能的操作场景。用户可能在尝试运行某个脚本,比如自动化配置、环境设置,或者是在启动PowerShell时自动加载配置文件。profile.ps1是PowerShell的用户配置文件,每次启动时会自动执行,如果其中包含脚本命令而执行策略允许,就会报错。 解决方案方面,用户需要更改执行策略。但需要指导他们如何正确操作,因为同的权限级别可能需要同的方法。首先,用户需要以管理员身份运行PowerShell,否则更改策略可能会失败。然后,使用Set-ExecutionPolicy命令来调整策略级别。常见的选项包括RemoteSigned(允许本地脚本,远程需签名)和Unrestricted(无限制,但有风险),还有Bypass(完全绕过,通常推荐)。用户应该根据安全需求选择合适的策略。 需要注意的是,在Windows系统中,尤其是较新的版本,可能还存在组策略或其他安全软件的限制,导致即使更改了执行策略仍然无效。这时候需要检查是否有其他层面的限制,或者使用-Scope参数来仅为当前用户设置策略,避开系统级的限制。 另外,用户可能需要暂时更改策略来运行某个脚本,之后恢复原设置,这时候可以建议在命令中使用-ExecutionPolicy Bypass参数来临时绕过,这样会永久改变系统设置,更加安全。 同时,我应该提醒用户关于安全风险。放宽执行策略可能会使系统更容易受到恶意脚本的攻击,因此建议仅在信任脚本来源的情况下进行调整,并在完成后恢复为更严格的策略。 用户可能太熟悉PowerShell的命令和权限管理,因此步骤需要详细,并且给出具体的命令示例,比如如何以管理员身份启动PowerShell,如何查看当前策略,如何设置新的策略等。此外,解释每个步骤的作用和可能的结果,帮助用户理解他们在做什么,避免盲目操作。 可能的误区包括用户可能没有以管理员身份运行PowerShell,导致权限足;或者错误地使用命令参数,比如忘记指定-Scope参数,导致策略应用范围正确。此外,用户可能对同的策略选项感到困惑,需要简要解释每个选项的意义,帮助他们做出合适的选择。 最后,如果用户的问题仍然存在,可能需要进一步排查,比如检查脚本本身是否有错误,或者是否存在其他系统级别的限制,比如杀毒软件拦截等。这时候可以建议用户提供更多信息,如具体的脚本内容或错误日志,以便进一步分析。</think>当你在PowerShell中看到`无法加载文件... 因为在此系统上禁止运行脚本`的错误时,说明**PowerShell执行策略(Execution Policy)阻止了脚本运行**。以下是详细解决方案: --- ### 一、问题根源 Windows默认的PowerShell执行策略为`Restricted`(禁止任何脚本运行),因此当你尝试执行脚本(如用户配置文件`profile.ps1`或自定义脚本)时会触发安全限制。 --- ### 二、解决方法 #### 方法1:临时绕过执行策略(推荐) 在命令行中**直接运行脚本时添加`-ExecutionPolicy Bypass`参数**,此操作仅对当前会话生效,影响系统全局设置: ```powershell powershell -ExecutionPolicy Bypass -File "C:\Users\LHN20\Documents\WindowsPowerShell\profile.ps1" ``` #### 方法2:修改全局执行策略 以管理员身份运行PowerShell,调整执行策略级别: 1. **右键点击开始菜单 → 选择“Windows PowerShell (管理员)”** 2. **查看当前策略**: ```powershell Get-ExecutionPolicy ``` 3. **设置新策略**(选一个适合的级别): ```powershell # 允许本地脚本,远程脚本需签名(推荐) Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # 完全开放(仅限测试环境) Set-ExecutionPolicy Unrestricted -Scope CurrentUser ``` - `-Scope CurrentUser`:仅修改当前用户的策略,避免影响其他账户。 #### 方法3:通过组策略修改(企业环境适用) 如果系统被组策略锁定,需按以下步骤解除: 1. 按下`Win + R`,输入`gpedit.msc`打开组策略编辑器 2. 导航到: ```text 计算机配置 → 管理模板 → Windows组件 → Windows PowerShell → 启用脚本执行 ``` 3. 选择策略级别(如`允许本地脚本和远程签名脚本`)并保存。 --- ### 三、关键参数说明 | 执行策略 | 作用 | |--------------------|----------------------------------------------------------------------| | `Restricted` | **默认**,禁止所有脚本运行 | | `RemoteSigned` | 允许本地脚本,远程脚本需数字签名(常用安全选项) | | `Unrestricted` | 允许所有脚本,但运行未签名远程脚本时提示警告 | | `Bypass` | 警告,阻止,完全放行(高危,仅临时使用) | --- ### 四、附加建议 1. **检查脚本来源** 确保`profile.ps1`或其他脚本未包含恶意代码(可通过记事本打开查看内容)。 2. **修复配置文件** 如果错误仅在启动时出现,可尝试删除或重命名`profile.ps1`文件: ```powershell Rename-Item -Path $PROFILE -NewName "profile.ps1.bak" ``` 3. **使用VSCode替代** 在VSCode集成终端中运行脚本时,可尝试在设置中调整默认终端权限。 --- ### 五、操作流程图 ```text 触发错误 → 是否需长期运行脚本? → 是 → 以管理员身份运行PowerShell → 设置`RemoteSigned` → 否 → 使用`-ExecutionPolicy Bypass`临时运行 ``` 若仍报错,请检查: 1. 文件路径是否正确 2. 是否被防病毒软件拦截 3. 文件权限是否被锁定(右键属性 → 安全选项卡检查)
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值