SSH代理在docker compose容器内转发

时间:2015-10-01 22:17:45

标签: docker ssh-keys docker-compose

Could not open a connection to your authentication agent.

我正在关注approach of mounting the $SSH_AUTH_SOCK as a volume,但是这是通过撰写来完成的。

设置

~/.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_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。我错过了什么?

2 个答案:

答案 0 :(得分:9)

我使用whilp/ssh-agent解决了这个问题,但您应该注意这是直接使用 $http.get('resources/json/mkb10.json') .then(function(res){ $scope.cond.treeData = res.data; if (data !== undefined){ for (var i = 0; i < $scope.cond.treeData.length; i++){ $scope.cond.treeData[i].state = {}; for (var j = 0; j < data.cond.length; j++) if ($scope.cond.treeData[i].id == data.cond[j]){ $scope.cond.treeData[i].state = {selected: true}; } $scope.cond.treeData[i].state.opened = false; } } $scope.treeInstance.jstree(true).close_all(); $scope.treeConfig.version++; $scope.treeInstance.jstree(true).close_all(); }); 并且需要额外的长时间运行容器。为了便于使用,我将这种方法整合到docker-rails中。

  1. 启动一个长时间运行的容器 SSH_AUTH_SOCK

  2. 添加密钥 docker run -d --name=ssh-agent whilp/ssh-agent:latest

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

  4. 将bash打入容器并使用docker run --rm --volumes-from=ssh-agent -v ~/.ssh:/ssh -it whilp/ssh-agent:latest ssh-add -L

  5. 检查密钥

    我的yaml看起来像:

    ssh -T git@bitbucket.org

答案 1 :(得分:1)

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

docker-ssh-agent

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