配置VS Code的Remote-SSH插件遠程開發

配置Visual Studio Code的Remote - SSH插件進行遠程開發

有時不得不面臨在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中的配置也有獨立的一份,需要按需調整。

熟練運用之後,效率可以提高很多。

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章