10

配置Visual Studio Code的Remote - SSH插件进行远程开发

 3 years ago
source link: https://note.qidong.name/2019/08/vscode-remote-ssh/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

配置Visual Studio Code的Remote - SSH插件进行远程开发

2019-08-14 07:55:56 +08  字数:2534  标签: vscode

有时不得不面临在Windows开发Linux项目的场景。 由于种种问题,这会非常不方便。 如果用远程登录、Samba或者SSH X-Forwarding之类的技术,都会有网络卡顿问题,严重程度与两台机器的网络情况相关。

一些编辑器、IDE提供了不错的手段来解决这个问题,比如IDEA系列的付费版本,但用起来还是有一些问题。 我常用Mosh+Vim,远程开发毫无违和感。

今天要介绍的,则是在2019年6月的1.35.0版本后,vscode(Visual Studio Code)新增支持的Remote功能。 Remote功能由三个插件组成,分别实现三种不同场景的远程开发。

  • Remote - SSH:利用SSH连接远程host进行开发。
  • Remote - Container:连接当前机器上的容器进行开发。
  • Remote - WSL:在Windows 10上,连接子系统(Windows Subsystem for Linux)进行开发。

本文主要介绍Remote - SSH的配置和使用,并且详细描述了网络受限条件下的代理配置。

原理简介

在Local的系统上运行和使用vscode,但文件和运行环境却是在Remote的机器上。

Remote Development using SSH

和Samba或SSH的X-Forwarding相比,它使用了更轻量级的通信,也更稳定。

Samba是把Remote指定目录变成Local可访问、可操作的目录。 它经常出现卡顿、掉线等情况,不适合多文件、复杂项目的开发。 而且,运行环境仍然是Local的,不能解决关键问题。

X-Forwording是利用Remote运行的X-server与Local运行的X-client进行通讯,除必要数据外,还包含部分UI数据。 也就是说,UI是在Remote渲染完成,通讯之后,才在Local显示。 并且它还要求SSH的连接稳定,一旦发生网络波动就必须重启整个应用程序。 如果使用这个技术开一个IDE,不仅开发过程中时常出现卡顿,而且还经常被动重启,导致开发流程被强制打断,甚至可能丢失数据。

vscode的Remote - SSH,相当于一个X-Forwording的变种。 Local仅运行UI及相关插件,而Remote则是除UI外的完整运行环境。 二者的交互,仅包含UI需要展示的内容,通讯的数据量大大降低。 在使用过程中,非常流畅。

在稳定性方面,Remote - SSH略有加强,但也不够理想。 SSH如果因网络波动而中断,(和X-Forwording一样)会尝试重连; 如果重连不上,则需要重载workspace。 与完全重启相比,算是轻量级中断吧。 如果使用Mosh之类基于的UDP协议的远程连接,应该可避免上述问题,不知道是否已在开发计划内。

安装

如果还没安装的话,可以用以下方式安装vscode。

在Windows上安装Visutal Studio Code,主要有两种安装方式。 一是通过choco安装:

choco install vscode

这样安装,在初次比较方便,但无法在Windows下使用自动更新功能。

二是通过官网下载(推荐):https://code.visualstudio.com/

安装完成后,还要安装插件Remote - SSH

Local配置

Local是指vscode本体的运行环境,本文以Windows为例来介绍。 如果是Linux,问题会简单很多。

Local代理

修改【Internet 选项】【连接】【局域网设置】,使默认的系统代理可用。 也许,还需要用cntlm建立代理,改成免密可用的形式。

只要系统代理可用,vscode默认配置就可以上网,更新或者下载插件。

如果有证书认证的问题,在【Settings】【Application】【Proxy】中,修改一些配置可能会有所帮助。

{
    "http.proxyStrictSSL": false,
    "http.systemCertificates": false
}

注意http.proxy未必生效。

终端

Windows 7下,默认终端有两个:

  • cmd.exe
  • powershell.exe

它们都有已知问题,缺乏必要的工具如sshgit,不适合作为开发环境。

如果已经安装Git,可以把默认终端调整为Git Bash。 在settings.json添加以下内容:

{
    "terminal.integrated.shell.windows": "D:\\Program Files\\Git\\bin\\bash.exe",
    ...
}

其中D:开头的字符串应替换为Git Bash真正的安装位置。

如果没有安装Git,则推荐安装,否则没有SSH客户端,则无法使用Remote - SSH。 SSH客户端也可通过其它方式安装,但这是最简单地途径。

Remote配置

Remote是指远程开发的目标机器,必须是Linux。 系统要求详见《System requirements》。

Git Bash与SSH配置

首先,安装Git Bash,并确保在其中可以ssh登录到目标机器。 另外,在安装Git Bash时要保证sshcmd.exe的PATH中。 注意安装向导中的【Adjusting your PATH environment】选项,要选第三项 ——【Use Git and optional Unix tools from the Command Prompt】。

由于使用SSH进行通信,因此先要保证SSH可以免密登录。 此外,还需要使用SSH的config配置。 默认情况下,config文件位置是%USERPROFILE%/.ssh/config。 按以下形式,可添加多个Host配置。

Host hangzhou
    HostName 10.xxx.xxx.xxx
    User yanqd0

Host xiamen
    HostName 100.xxx.xxx.xxx
    User yanqd0
    Port 10022

其中,yanqd0是(孤常用的)用户名,使用时按需替换。 Host只是一个名称,可以随意填写一个合法的hostnamePort默认是22,如果使用非22端口则需要额外指定。

Remote代理

Remote的代理配置,显然和Local不同。 因此,如果需要Remote的Linux中配置代理,需要在其Bash中配置环境变量http_proxyhttps_proxy。 由于Remote - SSH在启动时,需要先用wget初始化Remote的vscode server。 因此,Remote必须安装wget,并可选在~/.wgetrc使用以下配置。

use_proxy = yes
http_proxy = http://localhost:3128
https_proxy = https://localhost:3128
check_certificate = off

其中,localhost:3128需要换成一个可用的免密代理。

总结

必要配置已经完成了,之后就可以在左侧新增的Remote - SSH侧边栏中, 通过点击登录相关机器,打开远程workspace,使用远程环境开发。

使用过程中,要注意在workspace运行的插件,要在对应的Remote安装才能使用,仅仅在Local安装是无用的。 此外,Settings中的配置也有独立的一份,需要按需调整。

熟练运用之后,效率可以提高很多。

参考


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK