ssh-agent 转发到 Docker Compose 环境无法工作

13

我一直在努力将ssh-agent转发到我的docker容器中(使用我的docker-compose安装)。我使用运行Catalina的Mac,docker-engine 19.03.8和Compose @ 1.24。以下是我的docker-compose文件:

version: '3.7'
services:
  platform:
    build:
      context: .
      dockerfile: ./platform/compose/Dockerfile.platform.local
    working_dir: /root/platform
    ports:
      - "3000:3000"
    command: ["./compose/scripts/start_rails.sh"]
    tty: true
    stdin_open: true
    volumes:
      - type: bind
        source: /run/host-services/ssh-auth.sock
        target: /run/host-services/ssh-auth.sock
    env_file: ./platform/.env
    environment:
      TERM: xterm-256color
      SSH_AUTH_SOCK: /run/host-services/ssh-auth.sock

volumes:

我配置ssh-agent转发的方法如docker-compose文档中所述。

./compose/scripts/start_rails.sh脚本执行bundle install && bundle exec rails s。我有一些从私有仓库获取的gem包,我认为通过转发ssh-agent应该能够安装这些gem包。

我还尝试在启动docker-compose之前启动ssh-agent,但似乎没有任何作用。

{
  "debug": true,
  "experimental": true,
  "features": {
    "buildkit": true
  }
}

这是我在我的Docker配置文件中添加的内容,感谢任何帮助。

**更新:0 **

以下是我的.ssh目录结构和配置:

tree ~/.ssh

├── config
├── known_hosts
├── midhun
│   ├── id_rsa
│   └── id_rsa.pub
└── client
    ├── id_rsa
    └── id_rsa.pub

查看 ~/.ssh/config 文件

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/client/id_rsa

Host me.github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/midhun/id_rsa  

更新:1

我已经使用ForwardAgent Yes更新了我的配置,但还是没有用。我在这个Gist中记录了整个ssh日志-> https://gist.github.com/midhunkrishna/8f77ebdc90c7230d2ffae0834dc477cc


你想要实现什么目标并不清楚? - Tarun Lalwani
尝试将ssh-agent转发到正在运行的Docker容器中,以便在运行bundle install时,bundler可以从私有存储库中获取gem。 - MIdhun Krishna
请在两个入口中添加 ForwardAgent yes 并查看是否有效。 - Tarun Lalwani
1个回答

10

我相信您可以通过以下修改 ~/.ssh/config 来解决此问题:

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/client/id_rsa
    ForwardAgent yes

Host me.github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/midhun/id_rsa
    ForwardAgent yes

更新1:2020年5月5日

在您的情况下,它可能无法正常工作的原因是主机上的代理是无钥匙的。

您可以使用以下命令进行确认:

$ ssh-add -L
$ ssh-add -l

代理只会转发其内存中保存的密钥,不会转发磁盘上的任何内容。否则,您有可能未经许可即泄露所有存在的密钥。您需要做的是确保在启动时将这些密钥添加到您的ssh-agent中。
$ ssh-add ~/.ssh/client/id_rsa
$ ssh-add ~/.ssh/midhun/id_rsa

如果你在主机上执行 ssh-add -L 命令并且在 Docker 终端内部也看到了两个密钥,那么 ssh-agent 也将正常工作。

ssh-agent inside docker working


谢谢Tarun,但似乎不起作用。您可以在此处检查完整的日志-> https://gist.github.com/midhunkrishna/8f77ebdc90c7230d2ffae0834dc477cc - MIdhun Krishna
非常感谢。就像你说的一样。ssh-agent 没有添加任何身份验证信息。现在它可以工作了。 - MIdhun Krishna
1
我发现的另一个有趣的事情是,当 Docker 进程启动后,如果我使用 "eval ssh-agent –s" 创建一个新的 ssh-agent,则 ssh 配置不会被转发。 - MIdhun Krishna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接