The*_*fNL 5 ssh-agent docker docker-compose alpine-linux macos-sierra
好的,对于几个项目,我需要访问我的私有存储库,因此我想将主机的SSH代理转发到容器,以允许从这些私有存储库中检索。最终,我想在docker-compose中实现这一点。
我发现很多答案和解决方案都指向以下内容:
docker run --rm -t -i \
-v $SSH_AUTH_SOCK:/ssh-agent \
-e SSH_AUTH_SOCK=/ssh-agent \
alpine:3.6 sh
Run Code Online (Sandbox Code Playgroud)
但是当我在ssh-add -l里面运行时(确保openssh已安装)
我收到以下错误:
连接到代理时出错:连接被拒绝
还尝试在我的docker compose设置中尝试此操作,但似乎无法正常工作。由于大多数帖子和解决方案已有几年历史,我希望有人可以为我提供准确的最新信息。
SSH_AUTH_SOCK=`launchctl getenv SSH_AUTH_SOCK` ssh-add
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
容器中的挂载选项和 SSH_AUTH_SOCK 值都是魔术常量,请勿更改它们。
launchctl getenv SSH_AUTH_SOCK由于bug,在 iTerm2 3.2+ 上可能会输出空字符串。解决方法是:launchctl asuser $UID launchctl getenv SSH_AUTH_SOCK是,或注意:如果launchctl问题无法解决,还有另一种方法可以通过stdio 隧道转发 ssh 代理。
根据这个问题,您可以通过向-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
Run Code Online (Sandbox Code Playgroud)
您可以挂载文件,但不能挂载套接字-目前尚不支持通过虚拟机管理程序在MacOS之间将套接字共享到docker容器中。存在各种错误报告和确认,并且有一天应该可以运行。
因此,与此同时,您需要具有在容器和MacOS之间转发网络流量的功能。人们指出的解决方案之一是docker-ssh-agent-forward。
另一种解决方案是在容器中运行ssh-agent并从MacOS和其他容器中访问它-可能更具侵入性,但可行。解决方案是docker-ssh-agent。
| 归档时间: |
|
| 查看次数: |
2517 次 |
| 最近记录: |