docker compose容器内的SSH代理转发

docker compose容器内的SSH代理转发,docker,ssh-keys,docker-compose,Docker,Ssh Keys,Docker 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 li

无法打开与身份验证代理的连接。

我正在遵循,但这样做与撰写

安装程序
~/.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"
注意:我的作文中运行了插值,因此
$SSH\u AUTH\u SOCK
被替换为
/private/tmp/com.apple.launchd.ZxGtZy6a9w/Listeners

我在我的主机OSX上有正确的转发设置,它对另一个ubuntu主机有效

docker compose运行web bash

集装箱内 当我运行
ssh add-L
时,它表示
无法打开到您的身份验证代理的连接。

当我运行ssh代理时,它会产生

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\u AUTH\u SOCK时,它会生成
/SSH agent

问题: compose似乎使
SSH\u AUTH\u SOCK
可用于
bash
,但
SSH代理
似乎没有得到相同的
env
。我遗漏了什么?

我使用解决了它,不过您应该注意,这不是直接使用
SSH\u AUTH\u SOCK
解决的,并且需要一个额外的长时间运行的容器。为了便于使用,我将把这种方法集成到中

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

  • 添加您的密钥
    docker-run--rm--volumes-from=ssh-agent-v~/.ssh:/ssh-it-whilp/ssh-agent:latest-ssh-add/ssh/id\u-rsa

  • 列出你的钥匙
    docker run--rm--volumes from=ssh-agent-v~/.ssh:/ssh-it whilp/ssh-agent:latest ssh add-L

  • 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
    

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


    基于最小的
    alpine:3.4
    base图像。因此,任何在OSX上仍有此问题的人,请查看
    自述文件
    ,它现在很容易启动并运行

    是否需要或帮助?#1633是不必要的,我在
    注释中提到,我已经运行了插值。感谢您给我指出#551,.
    whilp/ssh代理有一些更改,因此我现在使用不同的方法,不能肯定地告诉您这是否还能继续工作。如果您正在寻找一些简单的东西,并且容器在配置了密钥的主机上运行,那么可以使用
    卷:-~/.ssh:/root/.ssh
    这种方法对我仍然有效,但是环境变量应该是
    ssh\u AUTH\u SOCK=/ssh/AUTH/SOCK
    ,并且您还需要配置顶级外部卷--“ssh代理”在本例中--并将其设置为外部卷(不推荐使用中的卷)。在docker compose上,将每个服务设置为装载ssh代理目录,并分别添加密钥