前言

我是一枚学生党,目前想要深入学习在Linux,也为了方便编写C/C++程序。而笔记本电脑性能一般,虚拟机开着桌面版得Linux卡得要死,服务器版的Linux看着黑乎乎的窗口完全无感,因此打算使用vs code远程连接Linux虚拟机进行学习。

为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客,记录vs code远程连接虚拟机的步骤。

环境:windows10、VMware软件、Ubuntu 20.10服务器版


一、安装vs code

1. 下载安装vs code

进入官网https://code.visualstudio.com/下载,傻瓜式安装,注意一下软件安装位置即可。

2. 安装vs code 插件

安装完成后,打开vs code。在vs code 的扩展里面分别搜索安装①C/C++ ②C++ Intellisense ③Chinese(中文插件,如果有需要的话) ④Remote-ssh
在这里插入图片描述

二、配置虚拟机

1. 确保虚拟机的ssh服务可用

打开虚拟机,在终端命令行上敲入:sudo apt-get install openssh-server进行安装。(事实上我的Ubuntu系统在安装的时候就已经连带了ssh)
在这里插入图片描述
确认服务器的ssh服务是打开的:
在这里插入图片描述

2. 记录虚拟机IP

此外,在服务器还需要敲入ifconfig命令,记录下虚拟机IP地址。(如下图,我的虚拟机IP是192.168.40.128)
在这里插入图片描述

3. PC机Windows10

因为选择的windows10最新版本应该是自带了openssh的客户端服务的,所以不需要安装

三、连接虚拟机

重新打开vs code,发现vs code界面左下角多了一个绿色的小标,可以点击进行远程连接。

在这里插入图片描述
点击后出现如图下的窗口,选择第一个即可:
然后选择 Add New SSH Host… (如果你是第一次连接的话……)
在这里插入图片描述
之后需要输入ssh指令,此处按照提示,输入“ssh 用户名@虚拟机IP”,如下图:
在这里插入图片描述
输入完毕之后,点击确认下一步,选择保存SSH配置文件的路径,这里默认选择第一个就好。
在这里插入图片描述
点击确认之后,vs code右下角会弹出添加host成功的信息,可以选择打开查看,文件内容如下图所示。其中,Host是服务器名称,随便是什么都行,HostName是你的虚拟机IP,User是你虚拟机的用户名。
在这里插入图片描述
叉掉这个文件,再次点击
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
此时出现需要你输入密码的输入框,此时输入虚拟机上系统的密码即可。
在这里插入图片描述

点击确认,如果一切正常,没有弹窗警告,便成功用vs code连接上虚拟机了。
在这里插入图片描述
成功连接了虚拟机后,这时,可以选择vs code的打开终端功能使用终端,该终端是连接虚拟机的终端,用起来和服务器版本的Linux一模一样,并且还可以在vs code里面打开源文件编辑,调试。
在这里插入图片描述

四、完善远程连接Linux编程体验

1. 免密连接虚拟机

SSH是通过RSA非对称加密算法完成的,具体细节感兴趣的朋友可以上网搜索。总之,我们需要免密连接虚拟机的话,是需要配置公私钥对的。
首先,我们在Linux虚拟机上生成密钥(可以通过vs code连接的终端,也可以用回虚拟机自身的命令行窗口)。
1)在终端上输入命令:

ssh-keygen

2)随后输入密钥保存的路径(默认继续按确认键即可):

Enter file in which to save the key (/home/XXX/.ssh/id_rsa):

3)输入密码(直接按确认键则密码为空):

Enter passphrase (empty for no passphrase):

4)再次输入密码确认(密码为空则继续按确认键):

Enter same passphrase again:

5)成功生成公钥与私钥:
在这里插入图片描述
6)接下来输入以下指令,来为虚拟机生成公钥。

cd ~/.ssh
cat id_rsa.pub >> authorized_keys
sudo chmod 600 authorized_keys
sudo chmod 700 ~/.ssh
sudo service sshd restart

7)随后,我们可以直接通过vs code远程连接虚拟机,打开文件夹,直接将生成的私钥id_rsa下载到主机中。
在这里插入图片描述

8)将下载到主机的id_rsa私钥文件挪到C:\Users\XXX.ssh\目录下,也就是SSH连接配置的config同目录。
在这里插入图片描述

2. 在远程主机上安装扩展

在使用vs code远程编写代码时,如果需要使用扩展功能,提升编程体验,最好安装上一些本机也有的扩展,比如下图。
在这里插入图片描述

3. Linux下vs code C++程序的编译执行

因为vs code它本身不是一个IDE,而是一个编辑器,但是它强大的地方在于可以添加各种各样的插件,这些插件让它工作起来就像集成的IDE一样。
而在SSH上安装了C++的扩展启用之后,会发现这么一件事(下图):
在这里插入图片描述
这个错误的原因是因为我们还没有配置vs code的json文件,也就是配置C++的工程文件。
但是,在配置C++工程文件之前,最好先检查Linux虚拟机上是否有安装g++、gdb、gcc等编译调试程序所需的工具。

sudo apt install g++
sudo apt install gdb
sudo apt install gcc

下图是所安装的插件:
在这里插入图片描述
首先,我们需要创建工程文件夹,在工程文件夹下创建.vscode文件夹,然后将下面三个json文件放入.vscode文件夹即可运行简单的程序了。

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ 生成活动文件",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

tasks.json

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

在这里插入图片描述
如果需要了解更多上面工程文件的细节,可以去搜索 linux下vs code C++的配置。

4. 服务器配置

如果配置的是内网服务器的话,和配置虚拟机的步骤是一样的。

五、踩坑记录

我一开始配置SSH的时候,vs code死活连不上虚拟机,并且网上搜索到的文章也对不上我的问题。
最后我自己测试的时候发现一个问题:
主机ping虚拟机超时。
虚拟机ping主机IP没问题。
利用主机windows的cmd命令窗口,键入ipconfig发现居然没有虚拟机vmware的IP地址,最后是通过重装了vmware来解决问题的。
希望我踩的这个坑的经验能帮到人吧。


总结

对于初学者,从windows的集成IDE转到Linux,这个vs code远程连接的方法十分不错,唯一麻烦的或许就是一开始的配置了。
就我目前看来,在vs code上通过终端操控Linux还没有发现什么明显不同于虚拟机Linux自身命令的区别。也就是说,这个方法集合了Linux服务器编程的高效和vs code图形界面的优点,是个很棒的学习与工作环境。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐