使用带有docker的ssh-agent

Pau*_*eon 24 macos ssh docker boot2docker

我想使用ssh-agent将我的密钥转发到docker镜像并从私有github仓库中取出.

我在Yosemite上使用了一个稍微修改过的https://github.com/phusion/passenger-docker和boot2docker.

ssh-add -l
...key details
boot2docker up
Run Code Online (Sandbox Code Playgroud)

然后我使用我在很多地方看到的命令(即https://gist.github.com/d11wtq/8699521):

docker run --rm -t -i -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent my_image /bin/bash
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用:

root@299212f6fee3:/# ssh-add -l
Could not open a connection to your authentication agent.

root@299212f6fee3:/# eval `ssh-agent -s`
Agent pid 19

root@299212f6fee3:/# ssh-add -l
The agent has no identities.

root@299212f6fee3:/# ssh git@github.com
Warning: Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts.
Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)

MJ1*_*MJ1 5

单线:

以下是在运行Debian Jessie映像的Ubuntu 16上进行设置的方法:

docker run --rm -it --name container_name \
-v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) \
-e SSH_AUTH_SOCK=$SSH_AUTH_SOCK my_image
Run Code Online (Sandbox Code Playgroud)

https://techtip.tech.blog/2016/12/04/using-ssh-agent-forwarding-with-a-docker-container/


Jak*_*kul 5

从 version 开始2.2.0.0,macOS 的 docker 允许用户在容器内访问主机的 SSH 代理。

这是一个示例命令,可让您执行此操作:

docker run --rm -it \
-v /run/host-services/ssh-auth.sock:/ssh-agent \
-e SSH_AUTH_SOCK="/ssh-agent" \
my_image
Run Code Online (Sandbox Code Playgroud)

请注意,您必须挂载特定路径 ( /run/host-services/ssh-auth.sock) 而不是$SSH_AUTH_SOCK环境变量中包含的路径,就像您在 linux 主机上所做的那样。

  • 在我的 mac OS Big Sur 上,没有这样的路径“/run/host-services”。为什么?我应该安装一些东西吗? (3认同)
  • 经过更多挖掘:我认为仅当容器内的用户是 root 时才有效(否则他无法访问虚拟机中的套接字) (2认同)
  • @Salivan 我自己也没有这条路。这是一个“神奇”的挂载 - docker 知道如何处理这个路径。你尝试过吗? (2认同)
  • @Salivan 理想情况下,这应该记录在某处,是的。我通过关注此 Github 问题的线程发现了这一点:https://github.com/docker/for-mac/issues/410 (2认同)

cre*_*ack 0

默认情况下,boot2docker 仅共享/Users. SSH_AUTH_SOCK可能是在下面/tmp,所以-v安装的是虚拟机的代理,而不是你的 Mac 上的代理。

如果您将 VirtualBox 设置为共享/tmp,它应该可以正常工作。