首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在macOS上使用带有docker的ssh代理

在macOS上使用带有docker的ssh代理
EN

Stack Overflow用户
提问于 2014-11-20 18:13:42
回答 5查看 19.9K关注 0票数 29

我想使用ssh-agent将我的密钥转发到docker镜像中,并从私有github存储库中提取。

我在Yosemite上使用的是略微修改过的https://github.com/phusion/passenger-docker和boot2docker版本。

代码语言:javascript
复制
ssh-add -l
...key details
boot2docker up

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

代码语言:javascript
复制
docker run --rm -t -i -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent my_image /bin/bash

然而,它似乎不起作用:

代码语言:javascript
复制
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).
EN

回答 5

Stack Overflow用户

发布于 2020-03-17 05:21:15

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

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

代码语言:javascript
复制
docker run --rm -it \
-v /run/host-services/ssh-auth.sock:/ssh-agent \
-e SSH_AUTH_SOCK="/ssh-agent" \
my_image

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

票数 10
EN

Stack Overflow用户

发布于 2016-12-09 21:16:52

一句话:

下面是如何在运行Debian Jessie镜像的Ubuntu 16上设置它:

代码语言:javascript
复制
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/

票数 6
EN

Stack Overflow用户

发布于 2015-07-09 21:34:16

我对@wilwilson的回答进行了扩展,并创建了一个在OSX boot2docker环境中设置代理转发的脚本。

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

代码语言:javascript
复制
#!/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,使用chmod +x,并使用docker-run-ssh而不是docker run

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27036936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档