首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Dockerfile中启动ssh-agent

如何在Dockerfile中启动ssh-agent
EN

Stack Overflow用户
提问于 2021-08-26 01:21:36
回答 1查看 1.3K关注 0票数 1

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

代码语言:javascript
复制
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)"是有效的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-26 02:41:04

我认为您需要删除您的ENTRYPOINT语句,然后需要:

代码语言:javascript
复制
USER ryan
WORKDIR /home/ryan/cas
CMD ["ssh-agent", "bash", "-l"]

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

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

代码语言:javascript
复制
bash -l -c 'eval $(ssh-agent -s)'

会发生什么?外壳立即退出,因为运行ssh-agent -s会导致代理自身后台化,这与"exiting“非常相似。由于您传递了-c标志,并且给-c的命令已经退出,所以父bash也会退出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68931421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档