【问题标题】:SSH Agent forwarding inside docker compose containerdocker compose 容器内的 SSH 代理转发
【发布时间】:2015-12-30 02:32:04
【问题描述】:

Could not open a connection to your authentication agent.

我正在关注approach of mounting the $SSH_AUTH_SOCK as a volume,但使用 compose。

设置

~/.ssh/config

Host *
  ForwardAgent yes

Dockerfile:

FROM atlashealth/ruby:2.2.2

RUN apt-get update -qq && \
    apt-get install -qy build-essential libxml2-dev libxslt1-dev \
            g++ qt5-default libqt5webkit5-dev xvfb dbus \
            libmysqlclient-dev \
            mysql-client openssh-client git && \

    # cleanup
    apt-get clean && \
    cd /var/lib/apt/lists && rm -fr *Release* *Sources* *Packages* && \
    truncate -s 0 /var/log/*log

编写 yaml:

web:
  build: "."
  environment:
  - SSH_AUTH_SOCK=/ssh-agent
  volumes:
  - "$SSH_AUTH_SOCK:/ssh-agent"

注意:我的 compose 上运行了插值,因此 $SSH_AUTH_SOCK 被替换为 /private/tmp/com.apple.launchd.ZxGtZy6a9w/Listeners 例如。

我的主机 OSX 上的转发设置正确,它适用于另一个 ubuntu 主机。

运行

docker-compose run web bash

容器内

当我运行ssh-add -L 时,它显示Could not open a connection to your authentication agent.

当我运行 ssh-agent 时,它会产生

SSH_AUTH_SOCK=/tmp/ssh-vqjuo7FIfVOL/agent.21; export SSH_AUTH_SOCK;
SSH_AGENT_PID=22; export SSH_AGENT_PID;
echo Agent pid 22;

当我从 bash 运行 echo $SSH_AUTH_SOCK 时,它会产生 /ssh-agent

问题

似乎 compose 使SSH_AUTH_SOCK 可用于bash,但似乎ssh-agent 并没有得到相同的env。我错过了什么?

【问题讨论】:

标签: docker ssh-keys docker-compose


【解决方案1】:

我使用whilp/ssh-agent 解决了它,但您应该注意,这不是直接使用SSH_AUTH_SOCK 并且需要一个额外的长时间运行的容器。为了便于使用,我会将这种方法集成到docker-rails 中。

  1. 启动一个长时间运行的容器 docker run -d --name=ssh-agent whilp/ssh-agent:latest

  2. 添加您的密钥 docker run --rm --volumes-from=ssh-agent -v ~/.ssh:/ssh -it whilp/ssh-agent:latest ssh-add /ssh/id_rsa

  3. 列出您的密钥 docker run --rm --volumes-from=ssh-agent -v ~/.ssh:/ssh -it whilp/ssh-agent:latest ssh-add -L

  4. bash 进入容器并使用ssh -T git@bitbucket.org检查密钥

我的 yaml 看起来像:

web:
    build: .
    working_dir: /project
    ports:
      - "3000"

    environment:
      # make ssh keys available via ssh forwarding (see volume entry)
      - SSH_AUTH_SOCK=/ssh-agent/socket

    volumes_from:
      # Use configured whilp/ssh-agent long running container for keys
      - ssh-agent

【讨论】:

  • whilp/ssh-agent 发生了一些变化,所以我现在使用了不同的方法,但不能肯定地告诉你这已经有效了。如果您正在寻找简单的东西并且容器在配置了密钥的主机上运行,​​您可以使用volumes: - ~/.ssh:/root/.ssh
  • 这种方法对我仍然有效,但环境变量应该是SSH_AUTH_SOCK=/ssh/auth/sock,你还需要配置一个顶级外部卷——在这种情况下是“ssh-agent”——并且将其设置为外部(volumes_from 已弃用)。在您的 docker-compose 上,将每个服务设置为挂载 ssh-agent 目录并单独添加您的密钥
【解决方案2】:

之前接受的使用whilp/ssh-agent 的答案由于某种原因对我不起作用(它以前起作用,但自从上次更改后它不起作用,我不知道为什么)所以我创建了自己的代理容器:

docker-ssh-agent

基于最小的alpine:3.4 基本图像。所以任何人在 OSX 上仍然遇到这个问题,请检查README 现在真的很容易启动和运行!

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2017-11-13
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多