Remote SSH: 提示與技巧
2019 年 10 月 3 日,作者:Sana Ajani,@sana_ajani
在之前的 Remote SSH 部落格文章中,我們介紹瞭如何設定 Linux 虛擬機器並使用 Visual Studio Code 中的 Remote - SSH 擴充套件連線到該 VM。在這篇部落格文章中,我們將介紹一些技巧和竅門,幫助您充分利用遠端設定。
使用 Remote SSH 進行連線
Visual Studio Code Remote - SSH 擴充套件允許您在 VS Code 內部透過 SSH 連線到遠端計算機或 VM。如果您尚未安裝該擴充套件,可以在擴充套件檢視 (⇧⌘X (Windows、Linux Ctrl+Shift+X)) 中搜索“remote ssh”。

安裝擴充套件後,您會注意到狀態列左下角有一個指示器。此指示器告訴您 VS Code 正在哪個上下文中執行(本地或遠端)。單擊該指示器會顯示遠端擴充套件命令列表。

SSH 配置檔案
在之前的 Remote SSH 部落格文章中,我們只連線了一臺機器,並在提示時輸入了“user@host”進行連線。如果您需要定期登入多個遠端伺服器或本地虛擬機器,有一種更好的連線方式,無需記住所有的使用者名稱、地址和額外的配置選項。
OpenSSH 支援使用 配置檔案來儲存所有不同的 SSH 連線。要使用 SSH 配置檔案,請單擊遠端指示器以調出遠端命令,選擇 Open Configuration File,然後選擇路徑為 "Users/{yourusername}/.ssh/config" 的檔案。

下面是一個 SSH 配置檔案的示例
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host python-linux-vm
HostName <vm address>
User sana
IdentityFile ~/.ssh/id_python_vm
Host node-vm
HostName <vm address>
User sana
Port 5522
IdentityFile ~/.ssh/id_node_vm
您可以在 SSH 配置檔案格式中指定更多 配置選項。在此檔案中,您將獲得補全和著色功能,您可以按 (⌃Space (Windows、Linux Ctrl+Space)) 來使用 IntelliSense,以瞭解有關配置選項的更多資訊。
上面使用的選項包括
| 選項 | 描述 |
|---|---|
| Host | 您的主機易於記憶的別名。 |
| HostName | 伺服器的主機名(您可以使用伺服器的 IP 地址)。 |
| User | 您透過 SSH 登入機器時指定的使用者名稱。 |
| Port | 用於透過 SSH 連線的埠。預設埠是 22,但如果您指定了唯一的埠,可以在這裡配置它。 |
| IdentityFile | 儲存私鑰的檔案位置。 |
您可以新增所有主機的資訊。儲存配置檔案後,您將能夠在遠端資源管理器中看到這些主機,以及您在該主機上開啟的任何資料夾。您可以選擇每個主機或資料夾旁邊的圖示,它將啟動一個新的 VS Code 視窗(例項)並連線到該主機。在下面的截圖中,我連線到了我的遠端機器 "python-linux-vm",遠端資源管理器顯示了我過去連線過的資料夾,以及從遠端機器轉發的任何埠。

ProxyCommand
有時您可能需要透過公司的內網或防火牆連線到遠端機器。在這種情況下,您可能需要使用中間伺服器或 跳轉框。如果您在一個配置為只接受來自一組固定主機的 SSH 連線的安全系統內工作,這種設定非常有用。
要將跳轉框設定與 Remote - SSH 擴充套件一起使用,您可以使用 ProxyCommand 配置選項。此配置將開啟到跳轉框的後臺 SSH 連線,然後透過私有 IP 地址連線到目標。
您可以在 SSH 配置檔案中設定 ProxyCommand 配置選項,如下所示
# Jump box with public IP address
Host jump-box
HostName 52.179.157.97
User sana
IdentityFile ~/.ssh/jumpbox
# Target machine with private IP address
Host target-box
HostName <IP address of target>
User sana
IdentityFile ~/.ssh/target
ProxyCommand ssh -q -W %h:%p jump-box
ControlMaster
如果您使用金鑰認證以外的其他認證方法連線到遠端 SSH 主機,例如雙因素認證、基於密碼的認證或帶有密碼短語的 SSH 金鑰,您可能需要多次輸入所需資訊。
與其開啟多個 SSH 連線,不如使用 ControlMaster 選項(僅適用於 macOS/Linux 客戶端)來重用現有連線,並減少輸入密碼短語的次數。
要使用此功能,請將以下內容新增到您的 SSH 配置檔案中
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
離線遠端機器
如果您受防火牆限制或公司鎖定您的 VM,並且它們無法連線到 Internet,Remote - SSH 擴充套件將無法連線到您的 VM,因為 VS Code 需要將一個名為 VS Code Server 的元件下載到遠端機器上。
但是,您現在可以透過 Remote - SSH 擴充套件中的新使用者 設定來解決此問題。如果您啟用設定 remote.SSH.allowLocalServerDownload,擴充套件將首先在客戶端上安裝 VS Code Server,然後透過 SCP將其複製到伺服器上。
注意:這目前是一個實驗性功能,但在下一個版本中將預設開啟。
Remote - SSH Nightly 擴充套件
如果您有興趣在有新更新和實驗性功能時立即進行測試,請安裝 Remote - SSH Nightly 擴充套件(請先解除安裝 Remote-SSH 穩定版擴充套件)。這是擴充套件的每夜構建版本,我們在其中試驗新功能和設定,然後才將它們釋出到穩定版本中。
我們希望得到您的反饋
感謝您試用 Remote - SSH 擴充套件!如果您遇到任何問題,或者想為我們建議新功能或場景,請在我們的 GitHub repo 上提出 issue。如果您想了解我們目前正在開發或即將推出的功能,請檢視我們的遠端開發 發行說明 和 迭代計劃。您還可以嘗試介紹性的 透過 SSH 進行遠端開發教程,它將指導您使用其他遠端擴充套件在 Docker 容器和 Window Subsystem for Linux (WSL) 中工作。
遠端編碼愉快!
Sana Ajani,VS Code 專案經理 @sana_ajani