透過 SSH 連線到遠端 Docker
我們推薦使用 Visual Studio Code Remote - SSH 擴充套件連線到執行 Docker 引擎的遠端機器。您可以同時使用 Remote - SSH 和 Dev Containers 擴充套件。您可以檢視 Dev Containers 文件中的步驟。
也可以直接使用 SSH 隧道連線到遠端 Docker 引擎,您可以在下面瞭解更多資訊。
設定 SSH 隧道
-
使用 ssh-keygen 或類似工具獲取並配置用於 SSH 身份驗證的公鑰/私鑰對。Docker 不支援密碼身份驗證,並且無法使用基於
DOCKER_HOST的配置。如果已設定了金鑰對,則可以使用它。 -
使用上面生成的私鑰檔案在本地系統上配置
ssh-agent。-
Windows (OpenSSH): 最新版本的 Windows 10 預設包含 OpenSSH。有一個名為
ssh-agent的 Windows 服務,預設停用,需要重新啟用並設定為自動啟動。從管理員 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.osxargs值或以其他方式配置啟動指令碼來執行此命令。您也可以每次登入時手動執行該命令。
-
-
使用
ssh-add -l驗證您的身份是否可用於 agent。它應該列出一個或多個身份,看起來像2048 SHA256:abcdefghijk somethingsomething (RSA)。如果它沒有列出任何身份,您將無法連線。此外,它需要具有正確的身份。如果 Docker CLI 正在執行,容器資源管理器也應該執行。容器資源管理器視窗使用 Docker CLI,而 Docker CLI 又使用ssh命令,並受益於自動推斷的配置。 -
建立一個指向執行 Docker 的遠端機器的 Docker context。使用
ssh://username@host:port作為 Docker endpoint(將 "host" 替換為您的遠端機器名稱或遠端機器 IP 地址)。在終端視窗中執行以下命令docker context create my-remote-docker-machine --docker "host=ssh://username@host:port"始終在 Docker endpoint 地址中包含使用者名稱,即使它與本地使用者名稱相同。如果省略埠,則預設為 22。
-
使用命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 執行 Docker Contexts: Use 命令以啟用指向遠端機器的 Docker context。此命令使 VS Code 和 Docker CLI 都使用遠端機器 context。
如果您沒有此命令,請確保安裝了 Container Tools extension。
-
建議使用
containers.explorerRefreshInterval設定將重新整理率更改為比預設值更長的時間。透過 SSH 的連線很慢,可能導致在上次重新整理完成之前再次嘗試重新整理。我們建議至少 3000 ms。
提示
-
Docker endpoint 字串 (
ssh://username@host:port) 中的 "host" 部分必須是全域性可解析的 DNS 機器名稱或 IP 地址。Container Tools extension 將無法使用 SSH 配置檔案中定義的主機別名。 -
確保遠端機器主機金鑰已儲存在 known_hosts 檔案中。確保這一點的最簡單方法是透過
ssh客戶端程式連線到機器(從命令列執行ssh username@host:port)。首次連線時,ssh程式將顯示主機金鑰並允許您批准它,從而自動更新known_hosts檔案。 -
Windows 10 build 1909 及更早版本附帶的 ssh-keygen 實用程式存在一個問題,使其無法與較新的 SSH 守護程式(例如 Ubuntu 20.04 LTS 及更高版本附帶的守護程式)正常工作。解決方法是使用 ECDSA 型別的金鑰,而不是 RSA 型別的金鑰進行 SSH 連線。您可以使用以下命令生成 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"