【问题标题】:Docker SSH-Key looking for a simple solutionDocker SSH-Key 寻找一个简单的解决方案
【发布时间】:2021-02-04 11:39:09
【问题描述】:

我正在尝试将我的 ssh 密钥复制到我的 docker 中,这是一个非常简单的 docker,包括通过包管理器提供的一些 LinuxTools。一个问题是因为,我无法想出一个简单的解决方案 ADD/COPY 似乎不起作用,使用 docker-volume 或 compose 似乎是最重要的。请指教。

FROM fedora:latest

RUN diskspacecheck=0 >> '/etc/dnf/dnf.conf'

RUN dnf -y update

RUN dnf -y install sshuttle \
    && dnf -y install git \
    && dnf -y install curl \
    && dnf -y install vim-X11 \
    && dnf -y install the_silver_searcher

RUN dnf -y clean packages

RUN adduser -m -p '' bowler
USER bowler

ADD /home/a/.ssh/id_rsa /home/bowler/.ssh/id_rsa

【问题讨论】:

标签: docker ssh-keys


【解决方案1】:

您不能将文件复制到构建目录之外的 docker 容器中。这是出于安全原因。您需要做的是首先将您的id_rsa 文件复制到与 Dockerfile 相同的目录中,然后更改ADD 以使用您刚刚制作的副本,而不是尝试从它的绝对路径复制它目前正在使用。

我还建议将ADD 更改为COPY,因为它更容易使用并且不会出现意外的绊倒行为。

所以在你的命令行:

cp ${HOME}/.ssh/id_rsa [path to dockerfile directory]

然后更新dockerfile:

COPY id_rsa /home/bowler/.ssh/id_rsa

您可能还需要添加RUN mkdir -p /home/bowler/.ssh


更新

基于 cmets,我认为值得在此处添加免责声明,即如果您走这条路,那么您创建的映像需要按照与您的 SSH 私钥相同的安全考虑进行处理。

在运行时注入这样的身份验证凭据要好得多。这可以通过将环境变量设置为用于启动容器的命令的一部分来完成。或者,如果您有一个安全的秘密存储库,则可以将其添加到那里,然后在容器启动时由容器下载(例如,使用 cURL)。

将 SSH 密钥直接安装到映像的方法并非完全不合理,但请谨慎行事,并记住可能有更清洁的替代方案。

【讨论】:

  • 请记住,任何获得此图像的人都可以docker run --rm the-image cat /home/bowler/.ssh/id_rsa 并获得您的公钥。您可能希望将此类凭据完全保留在您的图像之外。
  • @DavidMaze 这是一个很好的观点。如果将此 ssh 密钥添加到映像中,则需要按照与密钥本身相同的安全考虑来处理映像。在容器中需要 SSH 密钥肯定是有正当理由的,但最好在运行时引入它,而不是将其构建到映像本身中。
【解决方案2】:

我不会在构建过程中添加密钥,我会在您运行容器时挂载它,因为您可能最有可能将 Dockerfile 和其他文件存储在 VCS 中,然后每个人都可以看到您的私钥!

因此,在启动容器时添加它可能是更好/更安全的选项:) -v ${HOME}/.ssh/id_rsa:/home/bowler/.ssh/id_rsa

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2010-12-28
    • 2014-07-20
    • 2017-07-27
    • 2012-06-20
    相关资源
    最近更新 更多