VS Code Remote Development

2023-11-19

配置VSCode Remote Development

1、Ubuntu 上启用 SSH 

(1)打开终端,并且安装openssh-server软件包:

sudo apt update
sudo apt install openssh-server

当被提示时,输入你的密码并且按 Enter,继续安装。

(2)安装完成后,SSH 服务将会被自动启动。你可以验证 SSH 是否正在运行,输入:

sudo systemctl status ssh

输出将会告诉你服务正在运行,并且启用开机启动:

注意,Ubuntu 自带一个配置防火墙配置工具,称为 UFW。如果防火墙在你的系统上被启用,请确保打开了 SSH 端口:

sudo ufw allow ssh

2、在VSCode上安装Remote - SSH插件

在Windows系统下,打开cmd,输入ssh,查看是否安装,如下图所示(表示已经安装过了),如果没有找到命令,可以登录GitHub下载win版本OpenSSH安装包,记得将路径加入系统环境变量哟~

 打开VSCode,在扩展程序中搜索remote-ssh,搜索结果的第一个插件就是的,点击安装即可。 

点击左下角的图标,可以连接Linux服务器。

按提示输入登录命令和密码即可。

ssh 远程主机用户名@远程主机ip
例如 ssh mjn@192.168.10.131

3、设置免密登录

(1)打开cmd生成密钥

ssh-keygen -t rsa

然后点击回车即可,记住,括号里面出现的路径就是密钥存放的路径

如果已经存在密钥了,会提示Overwrite (y/n)? 已经存在就不用覆盖掉原来的了。

(2)打开密钥存放的路径,将箭头指向的这个文件传输到Linux中/home/mjn/.ssh下面

 

(3)修改.ssh目录权限为700

chmod 700 .ssh

(4)把公钥内容追加到authorized_keys文件中,并将权限修改为600

cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys

(5)重启sshd

systemctl restart sshd.service

4、远程连接效果

可以选择目录在左侧导航栏进行展示

此时,终端处显示的已经是Linux系统中的目录结构了。 


注:在设置免密登录的第5小步重启sshd中,笔者在输入sshd.service时使用自动补全,但就是补不全hh~,我以为是没有这个文件,所以搜索了其他博客,发现要启动sshd服务,相关指令如下:

启动sshd服务
systemctl start sshd.service

检查sshd服务状态
systemctl status sshd.service

关闭sshd服务
systemctl stop sshd.service

可能补不全的时候,自己手动输入 sshd.service 也可以执行,但是我当时下意识感觉缺这个文件hh~

下面我们将VS Code Remote Development 项目作为用例进行需求分析和逆向工程。

需求分析

首先,我们需要确定该软件的主要目标用户和使用场景。VS Code 是一个轻量级的源代码编辑器,它的目标用户是开发人员。Remote Development 功能则是为那些需要在远程计算机上进行开发的用户提供便利,使得开发人员可以在自己的本地计算机上使用 VS Code 来开发、测试和调试远程服务器上的应用程序。

接下来,我们可以通过阅读相关文档和代码库来确定 Remote Development 功能的主要特点和用例。例如,可以从以下几个方面进行分析:

  1. 连接方式:用户可以选择 SSH 或者 Container 这两种方式来连接到远程计算机。
  2. 开发环境:VS Code 支持在远程计算机上安装各种运行时和扩展,并且可以通过设置端口转发等方式进行访问。
  3. 文件同步:VS Code 可以通过 sshfs、rsync 等工具在本地计算机和远程服务器之间同步文件。
  4. 调试支持:VS Code 支持在远程服务器上进行调试,并且可以通过端口转发等方式进行调试。
  5. 安全性:VS Code 使用 SSH 隧道进行数据传输,并且支持通过密钥进行身份验证,保证数据传输的安全性。

通过对以上特点和用例的分析,我们可以进一步确定 Remote Development 功能的需求和设计。例如,需要支持多种连接方式、提供方便的文件同步和调试功能、确保数据传输的安全等。

用户需求

用户想要在本地使用 VS Code 的编辑器功能,但是由于各种原因(如开发环境需要特定的配置)无法在本地安装所需的软件或插件。因此,用户需要一种远程编辑器的解决方案,使其能够在本地使用 VS Code 的完整功能,并与远程服务器上的文件系统交互。

功能需求

VS Code Remote Development 解决方案应该具备以下主要功能:

  1. 允许用户通过 SSH、容器或 Windows 子系统连接到远程主机。
  2. 在本地打开远程文件夹并在本地 VS Code 编辑器中进行编辑。
  3. 提供本地和远程之间的文件同步和自动更新机制。
  4. 允许本地扩展在远程主机上运行。
  5. 允许开发人员在远程主机上运行任务和调试会话。
  6. 支持多个远程连接和快速切换。

性能需求

  1. 实现低延迟的远程编辑体验。
  2. 在多种网络环境下提供稳定的连接和操作性能。
  3. 对 CPU 和内存资源的占用要求较低。

安全需求

  1. 保护用户的身份验证信息和连接安全。
  2. 防止对远程主机进行未授权的访问或更改。

逆向工程

为了更好地理解 Remote Development 功能是如何实现的,我们可以进行逆向工程,即对代码库进行分析,以确定其实现细节。

在查看代码前,我们可以先了解 VS Code 的插件开发机制和插件架构。VS Code 使用 Electron 作为底层框架,并使用 TypeScript 进行开发。其中,插件可以访问 VS Code API 来扩展编辑器的功能。

接下来,我们可以阅读 Remote Development 插件的源代码并进行分析。Remote Development 插件包括客户端和服务器端两部分。客户端负责与用户交互,并将请求发送到远程服务器。服务器端则负责处理请求,并返回结果给客户端。

在客户端的实现中,我们可以看到 Remote Development 插件使用了 Visual Studio Code 中提供的 Terminal API 来创建终端窗口,通过 SSH 隧道将本地计算机的端口转发到远程计算机上,并使用 sshfs 和 rsync 等工具进行文件同步。此外,客户端还支持在远程服务器上进行远程调试。对于容器方式的连接,插件使用了 Docker API 来管理容器。

在服务器端的实现中,Remote Development 插件实现了一个名为 "vscode-remote-server" 的 Node.js 应用程序。该应用程序监听客户端发来的请求,并在收到请求后启动远程开发环境。同时,服务器端还支持通过 SSH 隧道将本地计算机的端口转发到远程计算机上。

通过逆向工程的分析,我们可以更深入地了解 Remote Development 功能的实现细节,并且在开发和调试过程中更加得心应手。

VS Code Remote Development 的实现方法可以从其 GitHub 上的源代码库中获得。该项目使用 TypeScript 和 Node.js 编写,下面是一些重要的类和函数:

  • remoteExplorer.ts:remoteExplorer.ts 提供了与远程资源管理器相关的类和函数。其中最重要的类是 RemoteFileService 和 RemoteFileSystemProvider,它们分别处理文件服务和文件系统提供程序的功能。
  • tunnelModel.ts:tunnelModel.ts 定义了一个名为 TunnelModel 的类,它处理 SSH 隧道的创建和关闭。该类依赖于 sshHelper.ts 中提供的 SSH 命令行帮助程序。
  • environmentService.ts:environmentService.ts 提供了用于获取和设置 VS Code 环境变量的方法。该模块还包含 DataprotocolServer 类,该类充当数据协议服务器并接受来自客户端的请求和响应。
  • extensionHostProcessManager.ts:extensionHostProcessManager.ts 管理远程扩展主机进程的生命周期。在用户打开远程文件夹时,该组件会运行并启动扩展插件进程,在本地 VS Code 编辑器中显示远程扩展插件。
  • terminalServer.ts:terminalServer.ts 实现了终端服务器,允许用户通过 SSH 连接到远程主机的终端。TerminalProcess 类管理 SSH 进程和 shell 进程。
  • remoteAgentConnection.ts:remoteAgentConnection.ts 定义了 RemoteAgentConnection 类,该类充当与远程 VS Code 编辑器的通信管道。它使用 MessagePipe 协议在本地计算机和远程主机之间传递信息。

通过以上的需求分析和逆向工程,我们可以更好地理解 VS Code Remote Development 解决方案的实现原理。VS Code Remote Development 提供了一种优秀的解决方案,使得用户能够在本地计算机上享受完整的编辑器功能,并与远程服务器进行交互。同时,最大限度地保证了性能、安全和可靠性。

需求分析和逆向工程是软件开发中非常重要的两个环节。通过需求分析,我们可以确定软件的主要功能、用户需求和设计方案等,从而保证软件满足用户期望。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS Code Remote Development 的相关文章

  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • waitpid() 的作用是什么?

    有什么用waitpid 它通常用于等待特定进程完成 或者如果您使用特殊标志则更改状态 基于其进程 ID 也称为pid 它还可用于等待一组子进程中的任何一个 无论是来自特定进程组的子进程还是当前进程的任何子进程 See here http l
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 在 C++ linux 中将 STRINGS 写入串口

    我知道这个问题遍布互联网 但仍然没有任何东西能让我完全解决这个问题 我想用 C linux 将数据写入 Propeller 板的串行端口 从控制台获取输入时程序运行良好 但是当我向它写入字符串时总是返回 ERROR Invalid comm
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

    我使用 Capistrano v3 和 capistrano symfony gem 设置了以下部署脚本 我正在使用 Ubuntu 14 4 部署到 AWS EC2 实例 我正在连接从 AWS 下载的 pem 文件 我的deploy rb中
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 为什么我可以在 /proc/pid/maps 输出中看到几个相同的段?

    测试在32位Linux上进行 代码如下 int foo int a int b int c a b return c int main int e 0 int d foo 1 2 printf d n d scanf d e return
  • Mcrt1.o和Scrt1.o有什么用?

    我坚持使用以下两个文件 即 Mcrt1 o 和 Scrt1 o 谁能帮我知道这两个文件的用途 如何使用它 我们以 gcrt1 o 为例 在使用 pg 选项编译进行性能测试时非常有用 谢谢 表格的文件 crt o总是 C 运行时启动代码 大部
  • 使用 plistBuddy 获取值数组

    var keychain access groups declare a val usr libexec PlistBuddy c Print var sample plist echo val echo val 0 Ouput Array
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • Linux中使用管道进行进程间通信

    我已经编写了在 linux 中写入数字以进行管道传输的代码 如下所示 但显示错误 任何人都可以帮助我解决这个问题 基本上该程序的问题陈述如下 一个程序将打开一个管道 向管道写入一个数字 其他程序将打开同一管道 读取数字并打印它们 关闭两个管
  • Web 应用程序的带宽和流量模拟器?

    您能否建议如何创建一个测试环境来模拟 Web 应用程序中的各种类型的带宽和流量 或者也许是一个针对本地主机执行此操作的开源程序 我认为在编写网络应用程序时这是一个非常重要的主题 但这不是一个常见的主题 我能想象创建这种环境的唯一方法是在本地
  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏

随机推荐

  • 我的百度经验目录

    百度经验目录 进一步了解基于Mathematica的图像特征检测方法 http jingyan baidu com article a501d80c44a372ec630f5eb4 html 怎么把python代码打包成exe文件 http
  • Obsidian入门

    这里讲一下Obsidian 一款支持markdown语法的笔记软件 软件上手没有难度 会基本的markdown语法可以直接使用 但是Obsidian第三方库插件社区提供了近千种插件以及各种各样的主题 可以帮助用户更好的使用它 相信很多人都跟
  • Python 导出保存 MongoDB上数据到Excel(.xls和.csv)文件

    Python 中使用MongoDB存储数据 若需要导出数据到文件 可以使用pandas或xlwings导出到Excel xls和 csv 文件 本文主要介绍Python 中导出保存MongoDB上数据到Excel xls和 csv 文件的方
  • CVPR17(backbone) - ResNeXt : 引入网络设计中的新维度cardinality

    文章目录 原文地址 论文阅读方法 初识 相知 回顾 代码 论文全称 Aggregated Residual Transformations for Deep Neural Network 原文地址 原文地址 论文阅读方法 三遍论文法 初识
  • 《一个操作系统的实现》读书笔记-- 第一章--最小的“操作系统”

    一 最简单的 操作系统 最最简单的 操作系统 就是一个最最简单的引导扇区 Boot Sector 虽然它不具有任何功能 但是它却能够直接在裸机上运行 不依赖其他软件 一个引导扇区是512个字节 并且以0xAA55为结束标识的扇区 下面就是那
  • EIoU和Focal-EIoU Loss

    1 论文 论文题目 Focal and Efficient IOU Loss for Accurate Bounding Box Regression 2 引言 CIoU Loss虽然考虑了边界框回归的重叠面积 中心点距离 高宽比 但是其公
  • 第一章:宇宙第一IDE--Visual Studio

    数据结构 是指一种计算机存储 组织数据的方式 IDE Integrated Development Environment 的缩写 表示 集成开发环境 它是一种用于提供程序开发环境的应用程序 一般包括代码编辑器 编译器 调试工具和图形化用户
  • Java调用exe程序

    String exePath D Xftp6 Xftp exe BufferedReader br null BufferedReader brError String line null try String cmd D Xftp6 Xf
  • MATLAB函数句柄

    1 何为函数句柄 函数句柄也是MATLAB中的一种常见的数据类型 它的地位类似于其它计算机语言里的函数对象 Javascript Python 函数指针 C 或者函数引用 Perl 它的作用是将一个函数封装成一个变量 使其能够像其它变量一样
  • 【NLP】自然语言处理技术在自动生成足球比赛战报上的应用

    1 背景介绍 自动生成新闻看似是一个很成熟的技术 很多年前就有各种应用 但是深入了解后我们可以发现机器自动生成的文章一般都是复述一些数字和简单的趋势变化 所以自动生成新闻的技术广泛应用在金融 体育领域 原因就是这类报道需要基于一定的事实 而
  • 模型调参之网格搜索与随机搜索

    模型调参之网格搜索与随机搜索 网格搜索法 GridSearchCV GridSearchCV GridSearchCV可以拆分成GridSearch和CV两部分 即网格搜素和交叉验证 GridSearch系统地遍历多种参数组合 通过交叉验证
  • 一文讲透彻!RobotFramwork测试框架教程(全能)

    Robot Framwork在业界早已名声大振 有很多刚学自动化测试的伙伴问我 有没有不需要编程就可以玩自动化的方法 有吗 有的 Robot Framwork 我们今天就一篇文章 把它讲得明明白白 一 Robot Framwork简述 Ro
  • 宅男福利!程序员周末看片神器,关键还开源

    本文源自自公众号开源最前线 ID OpenSourceTop 猿妹整理 别人眼中的程序员一定是这样的 每天有接不完的需求 写不完的代码 改不完的Bug 但大多数程序员偶尔也是有周末的 你是否有出现这种情况 连续加了好几天的班 好不容易迎来一
  • Python查询MySQL数据库并输出相应信息

    场景描述 将fork的编号与ip信息存储在了MySQL中 数据库为forklift 数据表名为fork info 存储格式为id num ip 那么如何用python去查询这些信息呢 分析 根据提供的MySQL表结构 想从名为fork in
  • 【千律】C++基础:打开并下载网页 -- ShellExecuteEx 和 URLDownloadToFile 函数

    include
  • Elasticsearch 7 系列(3) —— 核心概念

    目录 集群 cluster 节点 node 索引 index 类型 type 要学好Elasticsearch 就得先对Elasticsearch中的概念有所了解 接下来我们就重点说说Elasticsearch中的集群 节点 索引 类型 文
  • 多个if语句并列_使用if-then 语句

    最基本的结构化命令就是if then语句 if then语句有如下格式 if command then commands fi 简单的例子 cat test1 sh bin bash testing the if statementif p
  • 开发工具链-DevOps_阿里云云效

    简介 阿里云效官网 DevOps Development和Operations的组合词 是一组过程 方法与系统的统称 用于促进开发 应用程序 软件工程 技术运营和质量保障 QA 部门之间的沟通 协作与整合 百度百科 快速开始 1 云效首页
  • 给导航网站新增了一些免费影视网站,欢迎体验

    使用时建议使用火狐浏览器 并安装广告屏蔽插件 这样就没有广告 视频内的广告千万不要相信 其余安心食用 地理导航 地理上网从这里开始
  • VS Code Remote Development

    配置VSCode Remote Development 1 Ubuntu 上启用 SSH 1 打开终端 并且安装openssh server软件包 sudo apt update sudo apt install openssh serve