bash - 如何在 Dockerfile 中启动 ssh-agent

标签 bash docker ubuntu ssh dockerfile

进入我的容器时,我想以用户 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)"作品。

最佳答案

我想你想删除你的 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 也会退出。

关于bash - 如何在 Dockerfile 中启动 ssh-agent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68931421/

相关文章:

ubuntu - 在 Ubuntu 16.0.4 LTS 上安装 libcurl4-openssl-dev 时出现问题

linux - bash脚本小写输入文件中的每个字符串并将结果输出到新文件

python - 用于在文件夹中查找文件的 Bash 脚本

docker - 在 Dokku 中使用 Dockerized Vue 应用程序获取环境变量

docker - 如何使用 "&"创建 Dockerfile 以运行命令?

java - 使用 docker 和 IDE

php - 生成的 Postgresql 进程可以由 spawner PHP 脚本控制吗?

bash - 我可以将文件用作 awk 的模式以从其他文件列表中删除吗?

linux - 使用 bash 将子目录扁平化并在文件名前加上目录名

php - 为什么我不能让 Apache2 为来自/var/www 以外的目录的站点提供服务?