Remote SSH:提示與技巧
2019年10月3日,由 Sana Ajani (@sana_ajani) 釋出
在之前的 Remote SSH 博文中,我們介紹瞭如何設定 Linux 虛擬機器,並使用 Visual Studio Code 中的 Remote - SSH 擴充套件連線到該虛擬機器。在這篇博文中,我們將介紹一些技巧和竅門,幫助你充分利用你的遠端設定。
使用 Remote SSH 連線
Visual Studio Code 的 Remote - SSH 擴充套件允許你直接在 VS Code 內部透過 SSH 連線到遠端機器或虛擬機器。如果你尚未安裝該擴充套件,可以在擴充套件檢視 (⇧⌘X (Windows、Linux 為 Ctrl+Shift+X)) 中搜索 "remote ssh"。
安裝擴充套件後,你會注意到狀態列左下角有一個指示器。這個指示器告訴你 VS Code 當前的執行環境(本地或遠端)。點選該指示器,會彈出一個包含遠端擴充套件命令的列表。
SSH 配置檔案
在之前的 Remote 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
離線的遠端機器
如果你的虛擬機器受到防火牆限制或公司策略鎖定而無法連線到網際網路,Remote - SSH 擴充套件將無法連線到你的虛擬機器,因為 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 倉庫中提交問題。如果你想了解我們目前正在開發或即將推出的功能,請檢視我們的遠端開發發行說明和迭代計劃。你也可以嘗試入門級的透過 SSH進行遠端開發教程,它將引導你使用其他遠端擴充套件在 Docker 容器和適用於 Linux 的 Windows 子系統(WSL)中工作。
遠端編碼愉快!
Sana Ajani,VS Code 專案經理 @sana_ajani