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

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

好的,所以对于几个项目我需要访问我的私有(private)存储库,所以我想将主机的 SSH 代理转发到容器以允许从这些私有(private)存储库中检索。最终我想在 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后)

我收到以下错误:

Error connecting to agent: Connection refused



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

最佳答案

  • 将 key 添加到已启动的托管 ssh-agent:

  • SSH_AUTH_SOCK=`launchctl getenv SSH_AUTH_SOCK` ssh-add
    
  • 将已启动的托管 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
    
    容器中的挂载选项和 SSH_AUTH_SOCK 值都是魔术常量,不要更改它们。
  • launchctl getenv SSH_AUTH_SOCK由于 bug 可能会在 iTerm2 3.2+ 上输出空字符串.解决方法是以下之一:
  • 一个 portable way对于较新的操作系统(>=10.13,即 macOS High Sierra)为 launchctl asuser $UID launchctl getenv SSH_AUTH_SOCK , 或
  • 对于较旧的操作系统,在 iTerm2 > Prefs > Advanced 中,打开“Enable multi-server daemon”,或
  • 对于较旧的操作系统,在 iTerm2 > Prefs > Advanced 中,关闭“允许 session 在注销和重新登录后仍然存在”。

  • 注意:如果 launchctl问题无法解决,还有另一种方法可以通过 stdio tunnel 转发 ssh 代理.

    关于docker - SSH 代理从 Mac OS 转发到 Docker Alpine 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47334784/

    相关文章:

    node.js - 使用 docker compose 运行 Node 容器时出错

    ios - 如何找到我的 IOS 应用程序的存档文件?

    typescript - 尝试在Dockerfile中编译TypeScript文件失败

    docker - 如何在docker-compose中对容器进行分组?

    软件包安装时更新了 Java 版本

    postgresql - 使用 docker-compose 启动 Postgres 时如何设置 PGOPTIONS

    swift - Xcode 8 Beta 6 中出现奇怪的 SceneKit 链接器错误

    macos - 如何在 Mac OS (Sierra) 上重置 Jenkins 的用户凭据

    docker - Kubernetes-设置类路径

    linux - 从 bash 提示符和脚本向 docker exec 传递参数