遠端 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/{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 主機,則可能需要多次輸入必要資訊。
您可以使用 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