目前想要深入学习在Linux,也为了方便编写C/C++程序。Linux的环境里一般自带有c++的编译环境,如果没有安装gcc和g++等编译器也比较便利。但是在虚拟机里用vim编写C++程序又不得劲,因此打算使用vscode远程连接Linux虚拟机进行学习。
为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客用做记录。
环境:windows11、VMware17、rocky linux9.1 ( 开源的CentOS9 )
进入官网下载,傻瓜式安装,注意一下软件安装位置即可。
安装完成后,打开vscode。在vscode的扩展(快捷键 Ctrl+Shift+X)里面分别搜索安装①Chinese(中文插件,如果有需要的话) ②Remote-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 yes
PubkeyAuthentication yes
# 最后键入 :wq 保存退出
systemctl restart sshd #重启sshd服务
- 记录linux虚拟器的IP地址:
ip a # 查看IP地址
ifconfig # 也可查看IP地址
第一步:进入设置界面,选择 应用 -> 可选功能
第二步:先看看下方的已安装功能里有没有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_keys
chmod 700 ~/.ssh
# 重启sshd服务
systemctl restart sshd
随后,我们可以直接通过vscode远程连接虚拟机,打开文件夹,直接将生成的私钥id_rsa下载到主机中。
最后将下载的id_rsa文件,放在文件夹 C:/Users/***/.ssh 下,即可完成免密登录的最后一步。
用vscode连接上linux虚拟器后, 打开插件扩展, 安装C/C++和C/C++ Extension Pack插件。
注:以下操作:
1. 可以用命令行在vscode下方的Shell终端内操作,如下所示。
2. 也可以用鼠标在vscode内一步步操作
为了方便书写,不想截图了,就用命令行的方式来展现配置过程。
mkdir Projects
cd Projects
mkdir .vscode
cd .vscode
# 第一个配置文件 c_cpp_properties.json
vim 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.json
vim 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.json
vim launch.json
# 输入以下内容:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/built/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++ build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
cd ~/Peojects
# 创建工程test
mkdir test
cd test
# 创建存放编译后二进制文件的文件夹
mkdir built
在test工程内,新建一个test.cpp, 并在文件内写入以下内容:
#include
using 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