我是一枚学生党,目前想要深入学习在Linux,也为了方便编写C/C++程序。而笔记本电脑性能一般,虚拟机开着桌面版得Linux卡得要死,服务器版的Linux看着黑乎乎的窗口完全无感,因此打算使用vs code远程连接Linux虚拟机进行学习。
为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客,记录vs code远程连接虚拟机的步骤。
环境:windows10、VMware软件、Ubuntu 20.10服务器版
进入官网https://code.visualstudio.com/下载,傻瓜式安装,注意一下软件安装位置即可。
安装完成后,打开vs code。在vs code 的扩展里面分别搜索安装①C/C++ ②C++ Intellisense ③Chinese(中文插件,如果有需要的话) ④Remote-ssh
打开虚拟机,在终端命令行上敲入:sudo apt-get install openssh-server进行安装。(事实上我的Ubuntu系统在安装的时候就已经连带了ssh)
确认服务器的ssh服务是打开的:
此外,在服务器还需要敲入ifconfig命令,记录下虚拟机IP地址。(如下图,我的虚拟机IP是192.168.40.128)
因为选择的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里面打开源文件编辑,调试。
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同目录。
在使用vs code远程编写代码时,如果需要使用扩展功能,提升编程体验,最好安装上一些本机也有的扩展,比如下图。
因为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++的配置。
如果配置的是内网服务器的话,和配置虚拟机的步骤是一样的。
我一开始配置SSH的时候,vs code死活连不上虚拟机,并且网上搜索到的文章也对不上我的问题。
最后我自己测试的时候发现一个问题:
主机ping虚拟机超时。
虚拟机ping主机IP没问题。
利用主机windows的cmd命令窗口,键入ipconfig发现居然没有虚拟机vmware的IP地址,最后是通过重装了vmware来解决问题的。
希望我踩的这个坑的经验能帮到人吧。
对于初学者,从windows的集成IDE转到Linux,这个vs code远程连接的方法十分不错,唯一麻烦的或许就是一开始的配置了。
就我目前看来,在vs code上通过终端操控Linux还没有发现什么明显不同于虚拟机Linux自身命令的区别。也就是说,这个方法集合了Linux服务器编程的高效和vs code图形界面的优点,是个很棒的学习与工作环境。