这几天看到miaotony学长写了一篇基于VSCode和ssh实现远程编程/炼丹的博客。
我稍微看了看,他那个稍微有点复杂,实现了从任意一个外网主机通过代理服务器实现对内网主机的访问,并可以在这台内网电脑上进行远程开发。本蒟蒻并没有一台内网服务器,所以我只实现了从一个带有vscode的主机远程连接到阿里云服务器上进行远程开发的效果。下面我来记录我的实现过程。
我用的是阿里云,我们要使用ssh远程连接,所以要使用git,在配置阿里云服务器时,我们执行yum install -y git
虽然也能安装git,但是默认安装的版本比较旧,比如1.8.3版本的,现在最新版本的都有2.25.1版本了。而vscode的远程链接需要2以上的版本。
如果阿里云服务器上已经安装了git,先检查一下git版本。
git --version
如果它返回的版本是2版本以下,比如1.8.3版本。需要执行来将旧版本的git卸载掉。
yum remove -y git
然后依次执行对应命令。
以CentOS7系统为例:
#安装Git
#从github下载git源码
wget https://github.com/git/git/archive/v2.22.0.tar.gz
# 依赖库安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker
# 解压gz源码压缩包, 这里注意压缩包名字,不一定是v2.22.0.tar.gz,请自行通过 ls -al命令查看
tar -xzf v2.22.0.tar.gz
# 进入解压目录
cd git-2.22.0
# 编译安装
make prefix=/usr/local/git all
make prefix=/usr/local/git install
# 添加到环境变量
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc
# 查看版本号
git --version
安装g++/gcc,执行以下命令:
yum install gcc gcc-c++
安装gdb,执行以下命令:
yum install gdb
这时环境就搭建好了。
在vscode上按F5
添加launch.json
文件
将文件内容覆盖为
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", //配置名称,会在启动配置的下拉菜单中显示
"type": "cppdbg", //配置类型,只能为cppdbg
"request": "launch", //请求类型,可以为launch或attach
"program": "${fileDirname}/${fileBasenameNoExtension}.out", //将要调试的程序的路径
"args": [], //调试时传递给程序的命令行参数
"stopAtEntry": false, //设为true程序会暂停在入口处
"cwd": "${workspaceFolder}", //调试程序时的工作目录
"environment": [], //环境变量
"externalConsole": false, //调试时是否显示控制台窗口
"MIMode": "gdb", //指定连接的调试器,可以为gdb或lldb
"miDebuggerPath": "/usr/bin/gdb", //gdb路径
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build" //调试开始前执行的任务,一般为编译程序
}
]
}
其中几个需要注意的点:
然后按下ctrl+shift+p
,选择Tasks:Configure Task
即配置任务,然后选择使用模板生成task.json
,然后任务模板选择Others
,此时自动生成task.json
。将task.json
中的内容替换为:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build", //在launch.json文件中有用到
"type": "shell",
"command": "g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.out"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
args这样写的目的是为了后面使用统一配置,并方便.out调试文件输出到指定的目录下。
这时服务器端就配置好了。
首先还是先检查版本。如果是2版本以下就更新git,在windows系统下执行:
git update-git-for-windows
在插件市场中搜索remote development
并安装。
然后通过ctrl+shift+p
打开设置Remote-SSH-Settings
,设置Remote.SSH:Show Login Terminal
为true
接着直接点击左下角的ssh绿色图标:
在上方输入框内输入yourname@ip
远程主机用户名与ip地址,按回车进行连接。
当然你也可以设置常用主机,通过ctrl+shift+p
搜索并点击Remote-SSH: Open Configuration File
,选择 一个配置文件,就打开了配置文件。
Host #这里随意输入你喜欢的名字
HostName #输入你的IP地址
User #输入你登录的远程服务器用户名
点击新建终端即可打开Bash
首次登录后,VS Code会自动弹出一个新的窗口用于远程工作,并且会自动在远程主机上安装VS Code server。
在登录过程中需要不断的输入密码,只要弹出就输入密码即可。
但我们可以设置ssh免密登录。
首先先确认~目录下有没有.ssh文件夹,用ls -al
命令确认。
登录服务器root用户,然后在~目录下创建.ssh文件夹
# mkdir .ssh
# cd .ssh
在服务器端.ssh
文件下创建authorized_keys,执行
# vi authorized_keys
在这里,其实ssh公钥没有必要重复生成。如果你计算机里已经有了公钥文件可以直接复制。在电脑里找到id_rsa.pub(可以直接全局搜索)用记事本打开,把内容复制下来。
如果没有公钥文件,我们就必须生成公钥文件。
接下来在本地生成公钥文件,在桌面空白处右击选择git bash(这里默认个人电脑已经安装git),执行以下命令。(这个命令在自己电脑上执行)
# ssh-keygen
生成公钥密钥文件,这一步很重要。
然后直接一路回车。不需要设置密码。
此时在目录下就会有两个文件,分别是id_rsa 和 id_rsa.pub
其中 id_rsa.pub 就是公钥文件 我们复制一份
接着我们把公钥内容粘贴到服务器的文件(root/.ssh/authorized_keys)中
此时可以用VSCode直接进入服务器,打开authorized_keys,复制进去就行了。
最后我们修改它的权限
# chmod 600 ~/.ssh/authorized_keys
# chmod 700 ~/.ssh
然后我们在自己的电脑上,打开cmd,使用ssh方式连接我们的云服务器并输入密码。
$ ssh -v git@(这里填服务器公网IP地址)
最后提示
Welcome to Alibaba Cloud Elastic Compute Service !
说明免密登录成功了。到这里所有的配置就完成了。
这个时候虽然可以写代码,但服务器还识别不了语言,在远程开发的时候扩展分为本地扩展和远程扩展,因为连接远程服务器vscode会自动新打开一个窗口,在这个新窗口里点击应用市场,搜索c/c++
插件和code runner
插件,安装到服务器上即可。
在左侧活动栏打开资源管理器,点击打开文件夹,选择一个远程服务器开发文件夹打开就可以实现远程开发了。您甚至可以不要带电脑,在任何一个可以联网的主机上实现c/c++
远程开发。
【宇宙最强编辑器VS Code】(十)使用VS Code + SSH进行远程开发
CentOS 7安装gcc,并编辑运行第一个c/c++程序(含vi编辑器的简单使用)
CentOS 7 安装gcc、g++、gdb教程
在Linux系统下使用VS Code编写调试C++代码的配置流程