前言

这几天看到miaotony学长写了一篇基于VSCode和ssh实现远程编程/炼丹的博客。

我稍微看了看,他那个稍微有点复杂,实现了从任意一个外网主机通过代理服务器实现对内网主机的访问,并可以在这台内网电脑上进行远程开发。本蒟蒻并没有一台内网服务器,所以我只实现了从一个带有vscode的主机远程连接到阿里云服务器上进行远程开发的效果。下面我来记录我的实现过程。

  • 解决了SSH免密登录的问题。
  • 解决了vscode连接远程服务器的问题
  • 解决了远程服务器c++/c环境配置问题
  • 解决了远程编译运行调试c++/c源文件问题

服务器配置

我用的是阿里云,我们要使用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
配置c/c++编译运行调试环境

安装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" //调试开始前执行的任务,一般为编译程序
        }
    ]
}

其中几个需要注意的点:

  • name参数是为了给配置做名称上的区分;
  • program需要跟task.json中生成的out路径对应,这里为了让后面的项目都可以使用这个配置,因此将每个项目的.out文件生成在对应项目下;
  • miniDebuggerPath代表的gdb路径需要根据linux命令where is gcc确定;
  • preLaunchTask的任务名称需要跟task.json中的label名称对应,在调试前需要先编译。

然后按下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调试文件输出到指定的目录下。

这时服务器端就配置好了。

本地电脑配置

Git配置

首先还是先检查版本。如果是2版本以下就更新git,在windows系统下执行:

git update-git-for-windows
配置vscode
安装插件

在插件市场中搜索remote development并安装。

然后通过ctrl+shift+p打开设置Remote-SSH-Settings,设置Remote.SSH:Show Login Terminaltrue

接着直接点击左下角的ssh绿色图标:

在上方输入框内输入yourname@ip远程主机用户名与ip地址,按回车进行连接。

设置常用主机

当然你也可以设置常用主机,通过ctrl+shift+p搜索并点击Remote-SSH: Open Configuration File,选择 一个配置文件,就打开了配置文件。

Host #这里随意输入你喜欢的名字
    HostName #输入你的IP地址
    User #输入你登录的远程服务器用户名
远程终端

点击新建终端即可打开Bash

首次登录后,VS Code会自动弹出一个新的窗口用于远程工作,并且会自动在远程主机上安装VS Code server。

在登录过程中需要不断的输入密码,只要弹出就输入密码即可。

但我们可以设置ssh免密登录。

ssh免密登录远程服务器

首先先确认~目录下有没有.ssh文件夹,用ls -al命令确认。

  • 如果没有.ssh文件夹的话:

登录服务器root用户,然后在~目录下创建.ssh文件夹

# mkdir .ssh
# cd .ssh

在服务器端.ssh文件下创建authorized_keys,执行

# vi authorized_keys
  • 如果有.ssh文件夹:

在这里,其实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++远程开发。

Reference

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐