SSH代理从Mac OS转发到Docker Alpine容器

时间:2017-11-16 16:33:14

标签: docker docker-compose macos-sierra alpine ssh-agent

好的,对于我需要访问我的私有存储库的几个项目,所以我想将主机的SSH代理转发到容器,以允许从这些私有存储库中检索。最后我想在docker-compose中实现它。

我发现很多答案和解决方案指向了这样的事情:

docker run --rm -t -i \
-v $SSH_AUTH_SOCK:/ssh-agent \
-e SSH_AUTH_SOCK=/ssh-agent \
alpine:3.6 sh

但是当我在那里运行ssh-add -l时(在确保安装了openssh之后)

我收到以下错误:

  

连接代理时出错:拒绝连接

还在我的docker compose设置中尝试了这个,但它似乎没有像它应该的那样工作。 由于大多数帖子和解决方案已有几年的历史,我希望有人能帮助我提供准确的最新信息。

3 个答案:

答案 0 :(得分:5)

根据this issue,您可以通过将-v /run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock -e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock"选项添加到docker run命令中来将macOS ssh-agent转发到docker容器,例如

docker run --rm -it \
-v /run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock \
-e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock" \
docker_image

答案 1 :(得分:4)

您可以挂载文件,但不能挂载套接字 - 通过虚拟机管理程序在MacOS之间共享套接字到docker容器中是不支持的。存在各种错误报告和确认,有一天它应该有效。

因此,与此同时,您需要在容器和MacOS之间转发网络流量。人们指出的解决方案之一是docker-ssh-agent-forward

一个不同的解决方案是在容器中运行ssh-agent并从MacOS和其他容器访问它 - 它可能更具侵略性但有效。解决方案是docker-ssh-agent

答案 2 :(得分:1)

  1. 向已启动的托管ssh-agent添加密钥:
SSH_AUTH_SOCK=`launchctl getenv SSH_AUTH_SOCK` ssh-add
  1. 将已启动的托管ssh-agent转发到docker容器:
docker run --rm -it \
-v /run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock:ro \
-e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock" \
image ssh hosts

容器中的mount选项和SSH_AUTH_SOCK值都是魔术常量,请不要更改它们。

  1. launchctl getenv SSH_AUTH_SOCK可能由于bug在iTerm2 3.2+上输出空字符串。解决方法是在iTerm2>“偏好设置”>“高级”中以任何一种方式进行操作:
  • 打开“启用多服务器守护程序”,或
  • 关闭“允许会话以注销和重新登录为生”