通过 SSH 连接到远程 Docker
我们推荐使用 Visual Studio Code Remote - SSH 扩展来连接到运行 Docker 引擎的远程机器。您可以同时使用 Remote - SSH 和 Dev Containers 扩展。您可以查看 开发容器文档 中的步骤。
也可以直接使用 SSH 隧道连接到远程 Docker 引擎,您可以在下面阅读更多相关内容。
设置 SSH 隧道
-
使用 ssh-keygen 或类似工具获取并配置用于 SSH 身份验证的公钥/私钥对。Docker 不支持密码身份验证,并且无法使用基于
DOCKER_HOST的配置。如果已设置密钥对,则可以使用它。 -
在本地系统上使用上面生成的私钥文件配置
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.osxargs值或以其他方式配置启动脚本。您也可以在每次登录时手动运行该命令。
-
-
使用
ssh-add -l验证您的身份是否可用于代理。它应该列出一个或多个身份,看起来像2048 SHA256:abcdefghijk somethingsomething (RSA)。如果它没有列出任何身份,您将无法连接。此外,它需要具有正确的身份。如果 Docker CLI 正在工作,则容器资源管理器应该可以工作。容器资源管理器窗口使用 Docker CLI,而 Docker CLI 又使用ssh命令,并受益于自动推断的配置。 -
创建一个指向运行 Docker 的远程机器的 Docker 上下文。使用
ssh://username@host:port作为 Docker 端点(将“host”替换为您的远程机器名称,或远程机器 IP 地址)。在终端窗口中执行以下命令docker context create my-remote-docker-machine --docker "host=ssh://username@host:port"Docker 端点地址中始终包含用户名,即使它与本地用户名相同。如果省略端口,则默认为 22。
-
使用命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P))执行 Docker 上下文:使用 命令以激活指向远程机器的 Docker 上下文。此命令会导致 VS Code 和 Docker CLI 都使用远程机器上下文。
如果您没有此命令,请确保安装 容器工具扩展。
-
建议使用
containers.explorerRefreshInterval设置将刷新率更改为比默认值更长的时间。通过 SSH 连接很慢,可能会导致在前一次刷新甚至完成之前就尝试再次刷新。我们建议至少 3000 毫秒。
提示
-
Docker 端点字符串(
ssh://username@host:port)中的“host”部分必须是全局可解析的 DNS 机器名称或 IP 地址。容器工具扩展将无法使用 SSH 配置文件中定义的主机别名。 -
确保远程机器主机密钥已存储在 known_hosts 文件中。确保这一点的最简单方法是通过
ssh客户端程序连接到机器(从命令行运行ssh username@host:port)。首次连接时,ssh程序将显示主机密钥并让您批准它,从而自动更新known_hosts文件。 -
Windows 10 build 1909 及更早版本附带的 ssh-keygen 实用程序存在一个问题,导致它无法与较新的 SSH 守护程序(例如,Ubuntu 20.04 LTS 及更高版本附带的守护程序)正常工作。解决方法是,对于 SSH 连接,使用 ECDSA 类型密钥而不是 RSA 类型密钥。您可以使用以下命令生成 ECDSA SSH 密钥并将其添加到 SSH 代理:
ssh-keygen -t ecdsa -b 521 ssh-add id_ecdsa -
Windows 10 build 1909 及更早版本受到 一个问题的影响,该问题阻止 SSH 在 Windows 操作系统更新后获取您的身份。解决方法是向系统配置添加一个虚拟服务条目。从管理 PowerShell 窗口运行以下命令:
New-Service sshd -BinaryPathName "C:\Windows\System32\OpenSSH\ssh.exe"