遠端 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))。
安裝擴充功能後,您會在狀態列的左下角看到一個指示器。此指示器會告訴您 VS Code 目前執行的環境 (本機或遠端)。按一下指示器會顯示遠端擴充功能命令的清單。
SSH 組態檔
在先前的遠端 SSH 部落格文章中,我們只連線到單一機器,並且在提示時輸入 "user@host" 來完成連線。如果您經常登入多個遠端伺服器或本機虛擬機器,則有更好的連線方式,不必記住所有使用者名稱、位址和其他組態選項。
OpenSSH 支援使用組態檔來儲存所有不同的 SSH 連線。若要使用 SSH 組態檔,請按一下遠端指示器以顯示遠端命令,選擇 [開啟組態檔],然後選取路徑為 "Users/{您的使用者名稱}/.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 主機,您可能必須多次輸入所需的資訊。
您可以改用 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 容器和 Windows Subsystem for Linux (WSL) 內部工作。
祝您遠端編碼愉快!
Sana Ajani,VS Code 專案經理 @sana_ajani