🚀 在 VS Code 中免費取得

遠端 SSH:提示與技巧

2019 年 10 月 3 日,Sana Ajani,@sana_ajani

在先前的遠端 SSH 部落格文章中,我們介紹了如何設定 Linux 虛擬機器,以及如何使用 Visual Studio Code 中的 Remote - SSH 擴充功能連線到 VM。在這篇部落格文章中,我們將深入探討一些提示與技巧,讓您可以充分利用您的遠端設定。

使用遠端 SSH 連線

Visual Studio Code Remote - SSH 擴充功能讓您可以從 VS Code 內部,使用 SSH 連線到遠端機器或 VM。如果您尚未安裝此擴充功能,可以在擴充功能檢視中搜尋 "remote ssh" (⇧⌘X (Windows, Linux Ctrl+Shift+X))。

Remote - SSH extension

安裝擴充功能後,您會在狀態列的左下角注意到一個指示器。此指示器會告訴您 VS Code 目前在哪個環境中執行 (本機或遠端)。按一下指示器會顯示遠端擴充功能命令的清單。

Remote extension commands

SSH 設定檔

在先前的遠端 SSH 部落格文章中,我們僅連線到單一機器,並且在提示時輸入 "user@host" 來完成連線。如果您 регулярно 登入多個遠端伺服器或本機虛擬機器,有更好的連線方式,不必記住所有使用者名稱、位址和額外的設定選項。

OpenSSH 支援使用設定檔來儲存您所有不同的 SSH 連線。若要使用 SSH 設定檔,請按一下遠端指示器以顯示遠端命令,選擇 [開啟設定檔],然後選取路徑為 "Users/{yourusername}/.ssh/config" 的檔案。

Open Configuration File command

以下是 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",而遠端檔案總管會顯示我過去連線過的資料夾,以及從遠端機器轉送的任何埠。

Connected to python-linux-vm host machine

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 主機,則可能需要多次輸入必要資訊。

您可以使用 ControlMaster 選項 (僅適用於 macOS/Linux 用戶端),重複使用現有的連線,並減少您必須輸入密碼的次數,而無需開啟多個 SSH 連線。

若要使用此功能,請將以下內容新增至您的 SSH 設定檔

Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 600

離線遠端機器

如果您受到防火牆限制,或您的公司鎖定您的 VM 且它們無法連線到網際網路,則 Remote - SSH 擴充功能將無法連線到您的 VM,因為 VS Code 需要將名為 VS Code 伺服器的元件下載到遠端機器。

不過,您現在可以透過 Remote - SSH 擴充功能中的新使用者設定來解決此問題。如果您啟用 remote.SSH.allowLocalServerDownload 設定,擴充功能會先在本機用戶端上安裝 VS Code 伺服器,然後透過 SCP 將其複製到伺服器。

注意:這目前是實驗性功能,但在下一個版本中將預設開啟。

Remote - SSH Nightly 擴充功能

如果您有興趣在新的更新和實驗性功能可用時立即測試,請安裝 Remote - SSH Nightly 擴充功能 (請先解除安裝 Remote-SSH 穩定版擴充功能)。這是擴充功能的每夜建置版本,我們會在將新功能和設定發佈到穩定版本之前在此版本中進行實驗。

我們希望收到您的意見回饋

感謝您試用 Remote - SSH 擴充功能!如果您遇到任何問題,或想為我們建議新功能或情境,請在我們的 GitHub 存放庫上開啟問題。如果您想查看我們目前正在開發或即將推出的功能,請查看我們的遠端開發版本資訊迭代計畫。您也可以試用入門的透過 SSH 進行遠端開發教學課程,其中將引導您使用其他遠端擴充功能在 Docker 容器和 Window Subsystem for Linux (WSL) 中工作。

遠端編碼愉快,

Sana Ajani,VS Code 專案經理 @sana_ajani