【问题标题】:How to Start ssh-agent in Dockerfile如何在 Dockerfile 中启动 ssh-agent
【发布时间】:2021-10-26 02:17:35
【问题描述】:

当进入我的容器时,我想以用户ryan 登录目录/home/ryan/cas 并使用命令eval "$(ssh-agent -c)" 运行。我的以下 Dockerfile:

FROM ubuntu:latest 

ENV TZ=Australia/Sydney
RUN set -ex; \
    # NOTE(Ryan): Prevent docker build hanging on timezone confirmation
    ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone; \
    apt update; \
    apt install -y --no-install-recommends \
      sudo ca-certificates git gnupg openssh-client vim; \
    useradd -m ryan -g sudo; \
    printf "ryan ALL=(ALL:ALL) NOPASSWD:ALL" | sudo EDITOR="tee -a" visudo; \
    # NOTE(Ryan): Prevent sudo usage prompt appearing on startup
    touch /home/ryan/.sudo_as_admin_successful; \
    git clone https://github.com/ryan-mcclue/cas.git /home/ryan/cas; \
    chmod 777 -R /home/ryan/cas;

ENTRYPOINT ["/bin/bash", "-l", "-c"]

USER ryan
WORKDIR /home/ryan/cas
CMD eval "$(ssh-agent -s)"

但是,运行ssh-add 我仍然得到Could not open a connection to your authentication agent,这表明ssh-agent 没有运行。手动输入eval "$(ssh-agent -c)" 有效。

【问题讨论】:

  • 一个Docker容器运行一个进程;该图像最终将运行的单个进程是什么?您是否有理由需要 ssh 客户端来运行程序?
  • @DavidMaze 容器的目的是模拟全新安装的 Ubuntu 系统。在这个容器中,我测试了我的 setup 脚本,其目的是为我的工作区配置新系统。该脚本的一部分是自动添加我的 ssh 密钥。要做到这一点,需要ssh-agent 正在运行。

标签: bash docker ubuntu ssh dockerfile


【解决方案1】:

我认为你想删除你的 ENTRYPOINT 声明,然后你想:

USER ryan
WORKDIR /home/ryan/cas
CMD ["ssh-agent", "bash", "-l"]

这将为您提供一个登录 shell,在 ssh-agent 的控制下运行(因此您将拥有必要的 SSH_* 环境变量和一个可用的活动套接字)。


要了解您的容器发生了什么,请尝试从命令行运行:

bash -l -c 'eval $(ssh-agent -s)'

会发生什么? shell 立即退出,因为运行ssh-agent -s 会导致代理自身进入后台,这看起来与“退出”几乎相同。由于您传递了-c 标志,并且给-c 的命令已退出,因此父bash shell 也将退出。

【讨论】:

    猜你喜欢
    • 2015-05-07
    • 2020-08-26
    • 2019-02-06
    • 2018-03-31
    • 2013-09-23
    • 2019-11-17
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多