前言

目前想要深入学习在Linux,也为了方便编写C/C++程序。Linux的环境里一般自带有c++的编译环境,如果没有安装gcc和g++等编译器也比较便利。但是在虚拟机里用vim编写C++程序又不得劲,因此打算使用vscode远程连接Linux虚拟机进行学习。

为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客用做记录。

环境:windows11、VMware17、rocky linux9.1 ( 开源的CentOS9 )

一、 安装vscode

1. 下载安装vs code

进入官网下载,傻瓜式安装,注意一下软件安装位置即可。

2. 安装vs code 插件

安装完成后,打开vscode。在vscode的扩展(快捷键 Ctrl+Shift+X)里面分别搜索安装①Chinese(中文插件,如果有需要的话) ②Remote-ssh

二、配置虚拟机远程连接的ssh服务

– 确保虚拟机的ssh服务可用

打开虚拟机,在终端命令行上敲入:

which sshd#查看有没有安装ssh服务# 若没有安装的话,需手动安装dnf install openssh-server # CentOS8 及其以上的环境yum install openssh-server # CentOS7 及其以下的环境

进行安装。其实在系统安装的时候,若勾选开发工具的话,就自动安装ssh和C++编译环境

– 确认服务器的ssh服务的运行状态:

systemctl start sshd //开启ssh服务systemctl enable sshd // 设置ssh服务开机启动systemctl status sshd// 查看ssh服务当前的状态

如下图所示,即表示服务配置完成:

– 配置ssh的远程连接服务(选做)

– PermitRootLogin: 允许root用户登录

– PubkeyAuthentication:公钥身份验证,开启此项允许 vscode配置SSH秘钥登录

系统默认是允许以root用户来远程连接Linux虚拟器的,

但是如果发现明明自己sshd服务开着的,却还是连不上的,就需要配置ssh服务:

vim /etc/ssh/sshd_config # 修改一下sshd服务的配置# 将文件内进行如下修改PermitRootLogin yesPubkeyAuthentication yes# 最后键入 :wq保存退出systemctl restart sshd #重启sshd服务

– 记录linux虚拟器的IP地址:

ip a # 查看IP地址ifconfig # 也可查看IP地址

三、 实现vscode远程免密登录

– windows11配置ssh服务的客户端

第一步:进入设置界面,选择 应用 -> 可选功能

第二步:先看看下方的已安装功能里有没有OpenSSH客户端(必选)和OpenSSH服务端(可选),如果没有则点击右上角的查看功能,搜索OpenSSH客户端,然后下载并安装即可。

第三步:安装完成后,在下方的已安装功能里就有OpenSSH客户端了。

– vscode尝试登录linux虚拟器:

在配置文件内输入:

Host rockylinux9.1 #随便起个名字 HostName 192.168.xxx.xxx# 虚拟机的IP地址 User root# 虚拟机的用户名,我这里用root## 既然是自己一步步搭建的,没必要用普通用户来委屈自己

然后重新执行第一步操作,就会在弹窗里发现多了一个连接选项,接着我们点击那个连接选项,然后依次 选择Linux -> 输入密码

如果一切正常,没有弹窗警告,便成功用vscode连接上虚拟机了, 此时下方就是一个Shell窗口了。

– 免密连接虚拟机

我们可以使用vscode内的Shell窗口生成密钥

ssh-keygen # 生成密钥和公钥, 然后一路默认回车# 直到出现以下内容表示密钥生成完毕The key's randomart image is:+---[RSA 3072]----+|o..+ . ..+. ||ooo + o.o||E.o. oo..||++ *=oo+ ||+ooo**. S|| o =+*o ||..O.= ||= o o||.+ . |+----[SHA256]-----+# 进入 .ssh 文件夹内cd ~/.ssh# 查看文件夹下的内容有 id_rsa(私钥) id_rsa.pub(公钥)ls# 复制一份公钥的内容到authorized_keys中,ssh通过它进行密钥的验证cat id_rsa.pub >> authorized_keys# 设置文件权限chmod 600 authorized_keyschmod 700 ~/.ssh# 重启sshd服务systemctl restart sshd

随后,我们可以直接通过vscode远程连接虚拟机,打开文件夹,直接将生成的私钥id_rsa下载到主机中。

最后将下载的id_rsa文件,放在文件夹 C:/Users/***/.ssh 下,即可完成免密登录的最后一步。

四、 C++编译环境搭建

1. vscode安装插件

用vscode连接上linux虚拟器后, 打开插件扩展, 安装C/C++和C/C++ Extension Pack插件。

2. 配置C++运行的项目环境

注:以下操作:

1. 可以用命令行在vscode下方的Shell终端内操作,如下所示。

2. 也可以用鼠标在vscode内一步步操作

为了方便书写,不想截图了,就用命令行的方式来展现配置过程。

1-新建Projects文件夹,作为以后新建工程的主目录

mkdir Projectscd Projects

2- 在.vscode文件夹下,写三个配置文件

mkdir .vscodecd .vscode# 第一个配置文件 c_cpp_properties.jsonvim c_cpp_properties.json# 输入以下内容:{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"compilerPath": "/usr/bin/g++","cStandard": "c17","cppStandard": "gnu++17","intelliSenseMode": "linux-gcc-x64"}],"version": 4}
# 第二个配置文件 tasks.jsonvim tasks.json# 输入以下内容:{ "version": "2.0.0", "tasks": [{ "type": "shell", "label": "g++ build active file", "command": "/usr/bin/g++", "args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}/built/${fileBasenameNoExtension}" ], "options": {"cwd": "/usr/bin" }, "problemMatcher": ["$gcc" ], "group": {"kind": "build","isDefault": true }, "detail": "编译器: /usr/bin/g++"} ]}
# 第三个配置文件 launch.jsonvim launch.json# 输入以下内容:{// 使用 IntelliSense 了解相关属性。// 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/" />

3. 创建一个test工程

1- 创建项目的目录:

cd ~/Peojects# 创建工程testmkdir testcd test# 创建存放编译后二进制文件的文件夹mkdir built

2- 运行项目工程

在test工程内,新建一个test.cpp, 并在文件内写入以下内容:

#includeusing namespace std;int main(){ cout << "Hello world!" << endl; return 0;}

然后 按下快捷键"Ctrl + Shift + B" 就可以编译test.cpp文件了,编译的结果为test 存在在built文件夹内。

在shell终端内输入:

# 到工程的built目录下cd ~/Projects/test/built/# 运行生成的二进制文件,在linux中不需要exe后缀./test