开发环境搭建
桥接网络(Bridged Network)、网络地址转换(NAT, Network Address Translation)和主机模式网络(Host-only Networking)
在虚拟化环境中,常见的三种网络模式是桥接网络(Bridged Network)、网络地址转换(NAT, Network Address Translation)和主机模式网络(Host-only Networking)。这三种模式各有特点,适用于不同的应用场景:
-
桥接网络(Bridged Network):
- 定义:桥接网络将虚拟机直接连接到宿主机的网络,使得虚拟机表现得就像是连接在物理网络上的另一台独立的计算机。虚拟机会在物理网络上获得一个独立的网络地址。
- 用途:适用于需要虚拟机与外部网络中的其他设备进行直接通信的场景。
- 特点:虚拟机可以被网络中的其他设备直接访问,同时也能访问到外部的网络资源。
-
网络地址转换(NAT, Network Address Translation):
- 定义:在NAT模式下,虚拟机共享宿主机的IP地址,通过宿主机进行网络通信。虚拟机的网络流量会经过NAT设备进行地址转换,然后才发送到外部网络。
- 用途:适用于当虚拟机只需要访问互联网,而无需从外部网络直接被访问的场景。
- 特点:虚拟机不会在外部网络上显示独立的网络地址,这提供了一定程度的隔离和保护。
-
主机模式网络(Host-only Networking):
- 定义:在这种模式下,虚拟机只能与宿主机通信,不能直接访问外部网络。虚拟机和宿主机通常会在一个隔离的私有网络内进行交互。
- 用途:适用于测试和开发环境,当你需要隔离虚拟机,防止其访问或被外部网络访问时。
- 特点:虚拟机与外部网络完全隔离,仅与宿主机在私有网络中交互。
每种网络模式提供不同层级的网络访问和安全性,选择哪种模式取决于你的具体需求,如是否需要虚拟机与外部设备通信,或者你对网络隔离和安全性的考虑。
开启ssh
sudo apt install openssh-server
SSH(Secure Shell)是一种网络协议,用于在不安全的网络中安全地进行远程登录和其他网络服务。SSH通过加密连接,为在网络上发送的数据提供安全保护,防止中间人攻击和数据泄露。它是远程管理服务器或设备最常用和最可靠的方法之一。
SSH的主要功能包括:
- 远程控制:允许用户安全地登录到另一台计算机上,并在安全的环境中执行命令和操作。
- 数据传输:提供安全的网络服务,如文件传输(使用SCP或SFTP协议)和端口转发。
- 端口转发:能够将本地端口通过加密隧道重定向到远程服务器的端口,或者相反,这在需要安全地访问内部网络资源的场景中非常有用。
SSH工作原理:
- 加密:SSH 使用多种加密技术来保护数据传输过程中的隐私和完整性。这些加密技术包括对称加密、非对称加密和哈希算法。
- 认证:SSH 支持多种认证机制,如基于密码的认证和更安全的基于公钥的认证。
- 通道:通过建立一个加密的通道,所有通过SSH协议传输的数据都将在此通道中被加密,从而保护数据不被外部监听或篡改。
使用场景:
- 系统管理员:管理服务器,执行维护任务,安装和更新软件。
- 开发者:部署应用程序,管理生产环境。
- IT安全专家:安全地访问敏感数据和系统,执行安全审核和监控。
SSH 是远程计算机管理和维护的基石,因其安全性和功能性,被广泛用于企业和个人项目中。
Xshell 和 Xftp 是由韩国NetSarang Computer, Inc.开发的两款软件,主要用于网络管理和文件传输。它们广泛应用于管理远程服务器和传输文件,特别受到系统管理员和网络专业人士的欢迎。下面分别介绍这两款软件的功能和用途:
Xshell
Xshell 是一款功能强大的终端仿真软件,用于通过SSH(Secure Shell)、TELNET、RLOGIN、SFTP、SERIAL等协议安全地访问远程Unix/Linux服务器。它通常用于执行远程服务器命令、管理系统、进行系统维护或远程教育等任务。
主要特点包括:
- 多标签界面:可以在一个窗口中打开多个会话标签,方便同时管理多个连接。
- 强大的安全功能:提供SSH的加密功能,确保数据传输的安全。
- 高级脚本功能:支持自动化脚本,使用户能够自动执行重复任务。
- 用户界面定制:允许用户根据自己的喜好和需求定制界面。
链接到虚拟机
首先查询虚拟机ip
daic@daic:~$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.128.128 netmask 255.255.255.0 broadcast 192.168.128.255
inet6 fe80::a650:6a3f:15c4:a819 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:1c:d4:10 txqueuelen 1000 (Ethernet)
RX packets 38172 bytes 48497180 (48.4 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14371 bytes 1338628 (1.3 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 871 bytes 97518 (97.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 871 bytes 97518 (97.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
链接成功后
Xftp
Xftp 是一款基于Windows的文件传输程序,用于在本地计算机与远程服务器之间安全地传输文件。它支持SFTP和FTP两种协议,适用于需要高级文件传输功能的用户。
主要特点包括:
- 直观的图形用户界面:使文件传输过程简单易懂。
- 支持拖放操作:用户可以简单地拖放文件来上传或下载。
- 同步更新功能:可以同步本地文件夹和远程文件夹的内容,保证双方数据的一致性。
- 安全的文件传输:通过SSH加密文件传输,保证数据在传输过程中的安全。
应用场景
- 系统管理:系统管理员使用Xshell和Xftp来管理服务器,进行系统更新、配置和故障排除。
- 开发和部署:开发人员可以使用这些工具来部署代码到测试或生产服务器。
- 教育和培训:在教育领域,讲师可以使用Xshell进行远程教学演示。
总之,Xshell和Xftp是两款功能丰富且专业的软件,对于需要频繁进行远程系统管理和文件传输的用户来说,是非常有用的工具。
公钥和私钥
公钥和私钥是非对称加密中的两个基本概念,它们共同构成了密钥对。在非对称加密体系中,公钥和私钥是成对存在的,它们之间有数学上的依赖关系,但从一个密钥计算出另一个密钥在实际操作中是不可行的。这种加密方式的特点是用公钥加密的数据只能用对应的私钥解密,反之亦然。下面是公钥和私钥的主要作用和区别:
公钥的作用
- 加密数据:任何人都可以使用公钥来加密数据,但只有持有对应私钥的接收者能够解密这些数据。这确保了信息在传输过程中的保密性。
- 验证签名:公钥还用于验证由私钥生成的数字签名。这可以确认消息确实是由私钥的持有者发送,并且消息在传输过程中未被篡改。
私钥的作用
- 解密数据:私钥主要用于解密用公钥加密的数据。这保证了只有私钥的持有者才能阅读经过加密的信息。
- 生成签名:私钥用于创建数字签名,这种签名附加在消息上,任何人都可以用相对应的公钥来验证这个签名的有效性。
公钥和私钥的区别
-
分发方式:
- 公钥:可以公开分发,任何需要与密钥持有者安全通信的人都可以使用。
- 私钥:必须保密,只有密钥的持有者知道。泄露私钥将导致通信的安全性受到威胁。
-
功能用途:
- 公钥主要用于加密信息和验证签名。
- 私钥主要用于解密信息和生成签名。
-
安全性要求:
- 公钥因为是公开的,不需要特别的安全保护措施。
- 私钥必须高度保密和安全,一旦泄露,相关的安全通信即被破坏。
应用场景
- HTTPS:在网络安全通信中,如HTTPS协议,服务器的公钥通常包含在SSL/TLS证书中,客户端使用它来加密与服务器的通信。
- 电子邮件加密:使用如PGP(Pretty Good Privacy)的工具,发送者可以使用接收者的公钥来加密邮件,只有接收者的私钥才能解密。
- 软件签名:开发者使用私钥对软件进行签名,用户可以通过公钥验证软件是否未被篡改且确实来自该开发者。
非对称加密提供了一种在不安全的网络环境中安全传输数据的方法,并确保了信息的机密性和完整性。公钥和私钥的这种分离应用使得非对称加密在现代通信系统中变得非常重要和普遍。
通过vscode远程到虚拟机
通过remote_explore插件来连接
在使用Visual Studio Code (VSCode) 远程连接到虚拟机并设置编译器路径时,你通常会用到VSCode的Remote Development扩展,特别是Remote - SSH扩展,用来连接到运行在虚拟机上的Linux环境。设置编译器路径需要你首先确定你的项目所需的编译器已经在虚拟机上正确安装,然后在VSCode中进行适当的配置。这里是一些具体的步骤:
步骤 1: 安装和设置Remote - SSH扩展
- 在VSCode中安装“Remote - SSH”扩展。
- 打开VSCode的命令面板(Ctrl+Shift+P),输入并选择“Remote-SSH: Connect to Host…”,然后输入你的虚拟机的SSH详情(IP地址和用户名)。
- 如果提示,输入你的SSH密码或使用SSH密钥。
步骤 2: 安装和确认编译器
在远程虚拟机上安装所需的编译器(如GCC, Clang等)。你可以通过SSH终端在虚拟机上执行这一步。例如,如果是Ubuntu或Debian系统,可以使用以下命令安装GCC:
sudo apt update
sudo apt install build-essential
步骤 3: 设置编译器路径
- 在远程虚拟机上,确定编译器的路径。例如,GCC的路径通常是
/usr/bin/gcc
。你可以使用which gcc
命令来查找GCC的路径。 - 在VSCode中,打开你的项目文件夹。
- 打开或创建一个
.vscode
目录,并在该目录中创建一个settings.json
文件(如果还没有的话)。 - 在
settings.json
文件中配置编译器路径。这通常涉及到修改语言特定的设置。例如,如果你在使用C/C++,并使用了C/C++扩展(由Microsoft提供),你可以这样设置GCC编译器的路径:
{
"C_Cpp.default.compilerPath": "/usr/bin/gcc"
}
步骤 4: 验证设置
- 使用VSCode的终端(确保它是连接到远程服务器的终端),尝试编译你的项目来确保编译器路径设置正确。
注意事项
- 确保在
.vscode/settings.json
中的设置是针对远程环境的。VSCode的Remote - SSH扩展会让你在远程环境中独立配置设置。 - 如果你在使用其他编程语言或环境(如Python、Java等),可能需要设置不同的环境变量或路径。
通过上述步骤,你应该能够成功地在VSCode中远程连接到虚拟机并设置编译器路径。如果有其他具体需求或遇到问题,可以根据实际情况进行相应的调整和排错。