我想使用ssh-agent将我的密钥转发到docker镜像中,并从私有github仓库中提取。
我在约塞米蒂上使用了一个稍微修改过的https://github.com/phusion/passenger-docker版本和boot 2docker。
ssh-add -l
...key details
boot2docker up
我在许多地方都看到过这样的命令。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
但它似乎不起作用:
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).
8条答案
按热度按时间rfbsl7qr1#
从
2.2.0.0
版本开始,macOS的docker允许用户在容器内访问主机的SSH代理。下面是一个示例命令,让你这样做:
请注意,您必须挂载特定的路径(
/run/host-services/ssh-auth.sock
),而不是$SSH_AUTH_SOCK
环境变量中包含的路径,就像您在linux主机上所做的那样。a0zr77ik2#
一句俏皮话:
以下是如何在运行Debian杰西映像的Ubuntu 16上设置它:
https://techtip.tech.blog/2016/12/04/using-ssh-agent-forwarding-with-a-docker-container/
6yt4nkrj3#
我扩展了@wilwilson的答案,并创建了一个脚本,将在OSX boot 2docker环境中设置代理转发。
https://gist.github.com/rcoup/53e8dee9f5ea27a51855
将其插入
~/bin/docker-run-ssh
,chmod +x
,并使用docker-run-ssh
而不是docker run
。i2byvkas4#
我遇到了一个类似的问题,并且能够通过在主模式下使用ssh和控制套接字并将其 Package 在这样的脚本中来使事情变得非常无缝:
不是宇宙中最漂亮的东西,但比手动保持SSH会话打开IMO要好得多。
ubbxdtey5#
对于我来说,访问ssh-agent来转发密钥在OSX Mavericks和docker 1.5上工作如下:
1.使用
boot2docker ssh -A
将ssh导入boot 2docker虚拟机。不要忘记使用选项-A,它启用身份验证代理连接的转发。1.在boot 2docker ssh会话中:
此会话必须保持打开状态。注意SSH_AUTH_SOCK环境变量的值。
1.在另一个OS X终端中,使用步骤2中的SSH_AUTH_SOCK值发出docker run命令,如下所示:
我真的不喜欢这样的事实,我必须保持一个boot 2docker ssh会话打开,以使这一工作,但直到找到一个更好的解决方案,这至少为我工作。
yc0p9oo06#
套接字转发在OS X上还不起作用。以下是2019年引入的@henrjk答案的变体,使用 Docker for Mac 而不是 * boot 2docker *,后者现已过时。
1.首先在容器中运行一个ssh服务器,/tmp位于可导出卷上。就像这样
1.然后通过代理转发将ssh放入这个容器中
1.在这个ssh会话中找出ssh-agent的当前套接字
1.现在您可以运行真实的的容器了。只需确保将下面的SSH_AUTH_SOCK的值替换为您在上面步骤中获得的值
2eafrhcq7#
默认情况下,boot2docker只共享
/Users
下的文件。SSH_AUTH_SOCK
可能在/tmp
下,因此-v
装载VM的代理,而不是Mac上的代理。如果你将VirtualBox设置为共享
/tmp
,它应该可以工作。4bbkushb8#
无法打开与身份验证代理的连接。
此错误occurs when
$SSH_AUTH_SOCK
env var在主机上设置不正确或根本未设置。您可以尝试各种变通方法。我的建议是dual-boot Linux and macOS。其他资源: