配置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的机器上。
和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
它们都有已知问题,缺乏必要的工具如ssh
、git
,不适合作为开发环境。
如果已经安装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时要保证ssh
在cmd.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
只是一个名称,可以随意填写一个合法的hostname
。
Port
默认是22
,如果使用非22
端口则需要额外指定。
Remote代理 ¶
Remote的代理配置,显然和Local不同。
因此,如果需要Remote的Linux中配置代理,需要在其Bash中配置环境变量http_proxy
和https_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中的配置也有独立的一份,需要按需调整。
熟练运用之后,效率可以提高很多。