在docker中使用ssh-agent

我想使用ssh-agent将我的密钥转发到docker映像,并从一个私人github回购。

我在优胜美地上使用https://github.com/phusion/passenger-docker稍微修改版本的boot2docker。

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). 

我扩展了@ wilwilson的答案,并创build了一个脚本,可以在OSX boot2docker环境中设置代理转发。

https://gist.github.com/rcoup/53e8dee9f5ea27a51855

 #!/bin/bash # Use a unique ssh socket name per-invocation of this script SSH_SOCK=boot2docker.$$.ssh.socket # ssh into boot2docker with agent forwarding ssh -i ~/.ssh/id_boot2docker \ -o StrictHostKeyChecking=no \ -o IdentitiesOnly=yes \ -o UserKnownHostsFile=/dev/null \ -o LogLevel=quiet \ -p 2022 docker@localhost \ -A -M -S $SSH_SOCK -f -n \ tail -f /dev/null # get the agent socket path from the boot2docker vm B2D_AGENT_SOCK=$(ssh -S $SSH_SOCK docker@localhost echo \$SSH_AUTH_SOCK) # mount the socket (from the boot2docker vm) onto the docker container # and set the ssh agent environment variable so ssh tools pick it up docker run \ -v $B2D_AGENT_SOCK:/ssh-agent \ -e "SSH_AUTH_SOCK=/ssh-agent" \ "$@" # we're done; kill off the boot2docker ssh agent ssh -S $SSH_SOCK -O exit docker@localhost 

把它~/bin/docker-run-ssh~/bin/docker-run-sshchmod +x它,然后用docker-run-ssh代替docker run

我遇到了一个类似的问题,并且通过使用控制套接字在主模式下使用ssh,并将其全部封装在如下脚本中,从而使事情变得非常无缝:

 #!/bin/sh ssh -i ~/.vagrant.d/insecure_private_key -p 2222 -A -M -S ssh.socket -f docker@127.0.0.1 tail -f /dev/null HOST_SSH_AUTH_SOCK=$(ssh -S ssh.socket docker@127.0.0.1 env | grep "SSH_AUTH_SOCK" | cut -f 2 -d =) docker run -v $HOST_SSH_AUTH_SOCK:/ssh-agent \ -e "SSH_AUTH_SOCK=/ssh-agent" \ -t hello-world "$@" ssh -S ssh.socket -O exit docker@127.0.0.1 

不是在宇宙中最漂亮的东西,但比手动保持SSH会话打开海事组织更好。

单线:

以下是如何在运行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 

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

对于我来说,访问ssh-agent来转发在OSX Mavericks和docker 1.5上工作的密钥,如下所示:

  1. 使用boot2docker ssh -A将SSHjoin到boot2docker虚拟机中。 不要忘记使用选项-A来启用身份validation代理连接的转发。

  2. 在boot2docker ssh会话里面:

    docker @ boot2docker:〜$ echo $ SSH_AUTH_SOCK /tmp/ssh-BRLb99Y69U/agent.7750

本次会议必须保持开放。 记下SSH_AUTH_SOCK环境variables的值。

  1. 在另一个OS Xterminal中,使用步骤2中的SSH_AUTH_SOCK值执行docker run命令,如下所示:

    docker run –rm -t -i \ -v /tmp/ssh-BRLb99Y69U/agent.7750:/ssh-agent \ -e SSH_AUTH_SOCK = / ssh-agent my_image / bin / bash root @ 600d0e9b443d:/#ssh-add -l 2048 6c:8e:82:08:74:33:78:61:f9:9a:74:1b:65:46:be:eb /Users/dev/.ssh/id_rsa(RSA)

我不太喜欢这个事实,我必须保持一个boot2docker的ssh会话来开展这项工作,但直到find一个更好的解决scheme,这至less为我工作。

默认情况下,boot2docker仅共享/Users下的文件。 SSH_AUTH_SOCK可能在/tmp所以-v挂载虚拟机的代理,而不是你的mac的代理。

如果你设置你的VirtualBox共享/tmp ,它应该工作。