【问题标题】:docker build --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)" returning emptydocker build --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)" 返回空
【发布时间】:2020-04-19 19:32:02
【问题描述】:

我希望能够读取文件~/.ssh/id_rsa 的内容并将其传递给我的图像构建阶段。当我使用命令docker build --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)" 然后在构建过程中尝试在容器内回显它时,我得到了空。

RUN echo "$SSH_PRIVATE_KEY" > /priv_key \
    && cat /priv_key

结果是

Step 6/14 : RUN echo "$SSH_PRIVATE_KEY" > /priv_key     && cat /priv_key
 ---> Running in c8d6e3c88cd8

Removing intermediate container c8d6e3c88cd8

在 dockerfile 我有ARG SSH_PRIVATE_KEY

但是当我使用像 docker build --build-arg SSH_PRIVATE_KEY="dummy text" 这样的虚拟文本时,我可以在日志中看到它。

这会导致我的私钥格式无效,因为它是空的。 RUN echo "${SSH_PRIVATE_KEY}" >> /root/.ssh/id_rsa

我做错了什么或没有做什么?谢谢

【问题讨论】:

  • 这很奇怪。问题不在于 Docker,因为 dummy text 有效。 "$(cat ~/.ssh/id_rsa)" 在 shell 中被评估并被传递给 docker build,就像 dummy text 一样。 echo "$(cat ~/.ssh/id_rsa)" 有效吗?
  • 它适用于主机 - Mac OS。
  • 它是否适用于其他文件/您使用绝对路径而不是~
  • 很奇怪。即使这样也行不通。
  • 这种方法会破坏你的 ssh 密钥:你添加到 Docker 镜像中的任何东西都可以被任何拥有该镜像的人以纯文本形式轻松检索。无论您的更高级别目标是什么,我都强烈建议您寻找一种不需要从 Dockerfile 中调用 ssh 的方法。

标签: docker dockerfile containers docker-image


【解决方案1】:

我继续使用ONVAULT 工具来处理 ssh 密钥。 https://github.com/dockito/vault.

另外,我的.ssh/config 文件配置错误。新文件如下所示

Host *
  IgnoreUnknown AddKeysToAgent,UseKeychain
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa 

我希望它对将来的人有所帮助。

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 2017-07-06
    • 2018-06-27
    • 1970-01-01
    • 2019-12-30
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多