在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-ssh
, chmod +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上工作的密钥,如下所示:
-
使用
boot2docker ssh -A
将SSHjoin到boot2docker虚拟机中。 不要忘记使用选项-A来启用身份validation代理连接的转发。 -
在boot2docker ssh会话里面:
docker @ boot2docker:〜$ echo $ SSH_AUTH_SOCK /tmp/ssh-BRLb99Y69U/agent.7750
本次会议必须保持开放。 记下SSH_AUTH_SOCK环境variables的值。
-
在另一个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
,它应该工作。
- 容器监视默认情况下不启用
- 如何获取jenkinsdocker集装箱的IP地址?
- stream浪汉 – 无平行标志的含义
- 重新安装Boot2Docker由于明显的VirtualBox运行失败 – 如何closures它们?
- boot2docker不在macOS Sierra中启动
- 使用Vagrant Docker提供程序从boot2docker转发端口
- 在Windows中从bootdockerloginDocker中心registry时遇到问题
- 有没有可能从离线Windows上的Ubuntu ISO创build一个docker图像?
- 从Docker中的泊坞窗login到专用dockerregistry时发生服务器错误