使用 Ubuntu 虚拟机的开发环境介绍

本文介绍了在UbuntuServer上通过Samba共享文件并配合IDE(如任何IDE)进行C++开发的方法,以及使用SSH进行安全连接。还详细讲解了SSH密钥认证和如何在VSCode中启用远程连接以提高开发效率。
摘要由CSDN通过智能技术生成

学习 Linux C / C++ 开发,安装了 Ubuntu Server 虚拟机,接下来记录两种方式的开发环境:1. Samba文件映射 + 任何一个IDE; 2. vscode remote 远程连接。两种方式都需要安装 ssh 来进行远程连接。

1 samba + any IDE

samba + any IDE 是为了写代码的环境,安装好 samba 并完成文件映射之后,在宿主机上使用熟悉的 IDE 打开共享文件夹,就可以写代码了。但是在宿主机上Linux 中的命令需要远程连接,使用命令行,因此首先还是需要安装 ssh

1.1 安装 ssh

SSH(Secure Shell)是一种网络协议,用于安全地访问和管理远程系统。SSH 通过加密连接提供了一种安全的方法来访问和控制远程计算机,特别是在不安全的网络环境中。开启 SSH 服务之后,我们可以在宿主机中使用终端登录到 Ubuntu。

  1. 查询是否安装 openssh

通过如下命令查询是否已安装 SSH,若出现openssh-client和openss-server,则说明系统已经安装 OpenSSH

dpkg --list | grep ssh
ii  libssh-4:arm64                        0.9.6-2ubuntu0.22.04.2                  arm64        tiny C SSH library (OpenSSL flavor)
ii  openssh-client                        1:8.9p1-3ubuntu0.5                      arm64        secure shell (SSH) client, for secure access to remote machines
ii  openssh-server                        1:8.9p1-3ubuntu0.5                      arm64        secure shell (SSH) server, for secure access from remote machines
ii  openssh-sftp-server                   1:8.9p1-3ubuntu0.5                      arm64        secure shell (SSH) sftp server module, for SFTP access from remote machines
ii  ssh-import-id                         5.11-0ubuntu1                           all          securely retrieve an SSH public key and install it locally
  1. 安装 openssh

如果没有安装,输入以下命令安装openssh

sudo apt-get install ssh
  1. 查看 ssh 服务是否启动
~$ ps -auxf | grep ssh
root         987  0.0  0.1  15168  8352 ?        Ss   Jan05   0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root       25972  0.0  0.1  18144  9512 ?        Ss   12:00   0:00  \_ sshd: puyijun [priv]
puyijun    26073  0.0  0.0  18440  6524 ?        S    12:00   0:00      \_ sshd: puyijun@pts/0
puyijun    26098  0.0  0.0   5892  2000 pts/0    S+   12:07   0:00              \_ grep --color=auto ssh
  1. mac 终端连接虚拟机

首先在虚拟机中查看 IP 地址,使用命令 ifconfig

image-20240107202812387

在终端中输入 ssh 命令:ssh username@IP,进行连接,没有配置密钥认证的情况下需要输入远端对应的用户名密码,配置密钥认证后则可以直接进行连接。ssh 密钥认证见 2.1

ssh username@IPaddress

1.2 安装 samba 与文件映射

Samba 是一款开源软件,主要用于实现 Windows 文件和打印服务的共享。它允许不同操作系统(如基于 Unix 的系统和 Windows)之间共享文件和打印机资源。Samba 使用了 SMB/CIFS(Server Message Block/Common Internet File System)协议,这是 Windows 系统中用于网络文件和打印服务的标准协议。Samba 也允许在 macOS 宿主机和 Ubuntu 虚拟机之间建立文件共享。

原理

在 Ubuntu 虚拟机上,Samba 作为服务器运行,它配置为提供某个文件夹的网络访问,这意味着这个文件夹会被“共享”出去,使得其他网络上的计算机可以访问。

macOS 宿主机使用 SMB 协议连接到 Ubuntu 虚拟机的 Samba 服务器。通过 Finder 中的 “连接服务器” 功能实现,输入 SMB 地址如 smb://<Ubuntu虚拟机的IP>/<共享名称>

  1. 安装 samba 服务器
sudo apt-get install samba
  1. 在 Ubuntu 中创建共享文件夹
mkdir share
sudo chmod 777 share/ -R //更改权限(-R)
  1. 修改 samba 配置文件
sudo vim /etc/samba/smb.conf

将下面的 share 内容添加在配置文件的末尾

output

  1. 添加 samba 账号和密码

image-20240107202200284

  1. 在 Mac 中进行连接

在 finder 图标上右键,选择连接服务器,输入 SMB 地址 smb://<Ubuntu虚拟机的IP> 以及注册 samba 时的用户名和密码,即可连接成功

image

1.3 加载 Linux 内核

直接用 vscode 打开共享目录 share 中的一个项目文件夹,里面的代码会有红色波浪线的提醒,这是由于 IDE 中只有这一部分项目代码,没有 Linux 的完整内核代码,就无法从 include 的路径中寻找对应的函数,因此在写代码时,对应内核代码的结构体等也没有补全提醒

image-20240107203842437

为了更舒服地写代码,可以将 Linux 对应版本的内核源码加载到项目中,这样写代码就不会出现红色波浪线,并且有自动补全功能

具体加载内核源码到项目的方法根据 IDE 自行查找即可

2 vscode remote

直接使用强大的 vscode 的远程连接功能连接到虚拟机,既有可以查看文件目录的 IDE,又有命令行,还不用加载内核源码,很方便

1.1 ssh 密钥认证

vscode 远程连接的连接时需要输入密码进行认证,连接后打开文件夹需要输入密码认证,后续如果关闭文件夹再次打开同样需要输入密码认证,很麻烦。可以选择使用 ssh 密钥认证的方式,不需要手动输入字符串的密钥,这种方法也更加的安全和便捷,GitHub 中拉代码也可以选择 ssh 协议,使用 ssh 密钥认证不需要手动输入字符串密钥

原理

  1. 密钥对的生成
  • 当创建 SSH 密钥对时,生成了两个密钥:一个私钥和一个公钥。这两个密钥在数学上是相互关联的。
  • 私钥保留在您的本地计算机上,必须保密。
  • 公钥可以安全地分享,因为没有它无法解密通过私钥加密的信息。
  1. 复制公钥到服务器
  • 将公钥复制到远程服务器的 ~/.ssh/authorized_keys 文件中。这使得服务器知道“哪些公钥对应的私钥持有者被允许登录”。
  1. 身份验证过程
  • 当尝试通过 SSH 连接到服务器时,服务器查看 ~/.ssh/authorized_keys 文件,并使用文件中的公钥来验证您的身份。
  • 服务器使用存储的公钥加密一个随机生成的挑战消息(challenge message)并发送给客户端。
  • 您的 SSH 客户端使用私钥解密这个消息。由于只有匹配的私钥才能解密由公钥加密的消息,这证明了您拥有相应的私钥。
  • 解密后的消息被发送回服务器以验证身份。如果客户端成功解密并响应了服务器的挑战,身份验证就完成了。

具体步骤

  1. 宿主机(本机)生成密钥对
ssh-keygen -t rsa -b 2048

一路回车,不设置密码。这将生成一对密钥:默认情况下,私钥位于 ~/.ssh/id_rsa,公钥位于 ~/.ssh/id_rsa.pub

  1. 将公钥拷贝到服务器上
ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote_host

这个命令会将公钥添加到远程主机的 ~/.ssh/authorized_keys 文件中

接下来就可以直接使用 ssh username@hostip 进行连接,不需要密码

IP 变化后连接问题

比如虚拟机的网络连接方式从 NAT --> 桥接,IP 地址发生了变化,此时 ssh 命令会出现以下错误:

image-2

错误消息表明,SSH 客户端在连接远程主机时检测到主机密钥发生了变化,而且密钥不再匹配之前保存在 known_hosts 文件中的密钥。这可能是由于以下几种情况之一引起的:

  1. 虚拟机 IP 地址更改: 当你将虚拟机的网络连接方式从 NAT 更改为桥接时,虚拟机的网络配置可能会更改,导致其分配了一个新的 IP 地址。因此,SSH 客户端认为远程主机的身份已发生变化。
  2. 虚拟机或主机操作系统重装或更改: 如果虚拟机或主机的操作系统重新安装或更改了 SSH 密钥,也会导致主机密钥的变化。

为了解决这个问题,可以采取以下步骤:

  1. 更新 known_hosts 文件: 编辑 known_hosts 文件,删除其中包含旧主机密钥的行。在你的情况下,Offending ED25519 key 的信息位于 /Users/yijunpu/.ssh/known_hosts:19,使用文本编辑器打开该文件,删除这一行。
  2. 删除旧密钥后,尝试再次连接到虚拟机。SSH 客户端会检测到新的主机密钥,并询问是否要添加新密钥。接受新密钥并建立连接。

1.2 vscode 远程连接

进行 ssh 密钥认证之后,可以愉快地使用 vscode remote 插件进行远程连接啦

  1. Vscode 插件中搜索并安装 Remote-SSH 插件

image-20240107210920829

  1. connect to host

点击左下角的远程连接图标,选择 connect to host,接下来显示在已有的 ssh 配置文件中的 ssh 连接,可以选择 configure ssh hosts 来修改、增加、删除 ssh hosts,注意选择的是 个人用户 下面的配置文件

image-20240107211039954

image-20240107211232639

image-20240107211331705

添加或者修改对应的虚拟机 host,Host 为这个连接的名字(不重要,只是标识符),HostName 为远程连接对应的 IP,User 为远程连接使用的用户名。这里由于我们使用的 ssh 密钥认证,就不需要密码。

image-20240107211634857

  1. 打开目标文件夹

连接成功后,open folder 打开目标文件夹

image-20240107211819808

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值