🚀 在 VS Code 中

透過 SSH 連線至遠端 Docker

我們建議使用 Visual Studio Code Remote - SSH 擴充功能連線至執行 Docker 引擎的遠端機器。您可以一起使用 Remote - SSH開發容器 擴充功能。您可以檢閱開發容器文件中的步驟。

也可以使用 SSH 通道直接連線至遠端 Docker 引擎,您可以在下方閱讀更多相關資訊。

設定 SSH 通道

  1. 使用 ssh-keygen 或類似工具來取得和設定用於 SSH 驗證的公開/私密金鑰組。Docker 不支援密碼驗證,且使用以 DOCKER_HOST 為基礎的設定也不可能使用密碼驗證。如果已設定金鑰組,則可以使用。

  2. 本機系統上使用上方產生的私密金鑰檔案設定 ssh-agent

    • Windows (OpenSSH): 最新版本的 Windows 10 預設包含 OpenSSH。有一個 Windows 服務 ssh-agent 預設為停用,需要重新啟用並設定為自動啟動。從系統管理員 PowerShell 提示字元,執行 Set-Service ssh-agent -StartupType "Automatic"Start-Service ssh-agent。然後,執行 ssh-add <keyfile>

    • Windows (Pageant): 您可以使用 Pageant 而非 OpenSSH,在這種情況下,必須設定環境變數 SSH_AUTH_SOCK=pageant。將其設為使用者或系統環境變數會最容易。

    • Linux: 預設存在 ssh-agent。執行 ssh-add <keyfile>。已測試 Ubuntu;您在其他發行版本上可能會得到不同的結果。

    • macOS: 預設存在 ssh-agent,但 ssh-add 不會在登入之間持續存在。執行 ssh-add <keyfile>。我們建議設定 VS Code 以在終端機啟動時使用 terminal.integrated.profiles.osx args 值執行此命令,或以其他方式設定啟動腳本。您也可以在每次登入時手動執行該命令。

  3. 使用 ssh-add -l 驗證您的身分是否可供代理程式使用。它應該列出一個或多個類似 2048 SHA256:abcdefghijk somethingsomething (RSA) 的身分。如果它未列出任何身分,您將無法連線。此外,它需要具有正確的身分。Docker CLI 運作並不表示 Explorer 視窗將會運作。Explorer 視窗使用 dockerode(反過來使用 ssh2),而 Docker CLI 使用 ssh 命令,並受益於自動推斷的設定。

  4. 建立指向執行 Docker 的遠端機器的 Docker 環境。使用 ssh://username@host:port 作為 Docker 端點(將 "host" 替換為您的遠端機器名稱,或遠端機器 IP 位址)。從終端機視窗發出以下命令

    docker context create my-remote-docker-machine --docker "host=ssh://username@host:port"
    

    始終在 Docker 端點位址中包含使用者名稱,即使它與本機使用者名稱相同。如果您省略連接埠,則預設為 22。

  5. 使用命令面板 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 發出Docker 環境:使用命令以啟用指向遠端機器的 Docker 環境。此命令會導致 VS Code 和 Docker CLI 都使用遠端機器環境。

    如果您沒有此命令,請確保安裝 Docker 擴充功能

  6. 建議將重新整理速率變更為比預設值更長的值,並使用 docker.explorerRefreshInterval 設定。透過 SSH 的連線速度較慢,並且可能會導致在前一次重新整理完成之前嘗試再次重新整理。我們建議至少 3000 毫秒。

秘訣

  • Docker 端點字串 (ssh://username@host:port) 中的 "host" 部分必須是全域可解析的 DNS 機器名稱或 IP 位址。Docker 擴充功能將無法使用 SSH 設定檔中定義的主機別名。

  • 確保遠端機器主機金鑰已記憶在 known_hosts 檔案中。確保此點的最簡單方法是透過 ssh 用戶端程式連線至機器(從命令列執行 ssh username@host:port)。首次連線時,ssh 程式將顯示主機金鑰並讓您核准,自動更新 known_hosts 檔案。

  • Windows 10 build 1909 及更舊版本隨附的 ssh-keygen 公用程式有一個問題,會阻止它與較新的 SSH daemon(例如,Ubuntu 20.04 LTS 及更新版本隨附的 SSH daemon)正常運作。解決方法是針對 SSH 連線使用 ECDSA 類型金鑰,而非 RSA 類型金鑰。您可以使用以下命令產生 ECDSA SSH 金鑰並將其新增至 SSH agent

    ssh-keygen -t ecdsa -b 521
    ssh-add id_ecdsa
    
  • Windows 10 build 1909 及更舊版本受到 一個問題影響,該問題會阻止 SSH 在 Windows OS 更新後取得您的身分。解決方法是將虛擬服務項目新增至系統設定。從系統管理 PowerShell 視窗執行以下命令

    New-Service sshd -BinaryPathName "C:\Windows\System32\OpenSSH\ssh.exe"