Docker 通过 ssh 连接到远程守护进程 - 权限被拒绝(公钥)

tki*_*csi 5 ssh docker docker-engine

我在连接到远程(DigitalOcean)docker 引擎时遇到问题。我所做的是

  1. 在 Ubuntu 20.04 上使用 Docker 19.03.12 制作了一个 Droplet。
  2. 创建一个新用户 myuser 并添加到远程主机上的 docker 组。
  3. 为新用户创建一个 .ssh/authorized_keys ,并设置权限、所有者等。
  4. 重新启动 ssh 和 docker 服务。

结果

  1. 我可以使用 myuser 从 Mac 笔记本通过 ssh 连接到远程主机。(当我运行 ssh 钥匙串时,会要求输入 id_rsa.key 的密码。)
  2. 通过 ssh 登录远程主机后,我可以毫无问题地运行 docker ps、docker info。

问题

在为远程引擎创建新上下文之前,我尝试从 Mac 笔记本电脑上的本地客户端运行一些 docker 命令。对我来说有趣的部分是下面的命令都不需要 id_rsa 密码)

  1. docker -H ssh://myuser@droplet_ip ps-> 错误
  2. DOCKER_HOST=ssh://myuser@droplet_ip docker ps-> 错误

错误

docker -H ssh://myuser@droplet_ip ps
error during connect: Get http://docker/v1.40/containers/json: command [ssh -l myuser -- droplet_ip docker system dial-stdio] has exited with exit status 255, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=myuser@droplet_ip: Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)

我错过了什么步骤?如何连接到远程 docker 引擎?

lar*_*sks 11

听起来 Docker 可能不允许 ssh 在连接时提示输入密钥密码。最简单的解决方案可能是将您的密钥加载到 中ssh-agent,以便 Docker 无需请求密码即可使用该密钥。

如果您想添加默认密钥 ( ~/.ssh/id_rsa),您只需运行:

ssh-add
Run Code Online (Sandbox Code Playgroud)

您可以通过提供密钥的路径来添加特定密钥:

ssh-add ~/.ssh/id_rsa_special
Run Code Online (Sandbox Code Playgroud)

ssh-agent大多数现代桌面环境默认运行一个进程。