【问题标题】:How to add ssh passphrase to Docker and removed it after it was used?如何将 ssh 密码添加到 Docker 并在使用后将其删除?
【发布时间】:2020-09-24 05:30:42
【问题描述】:

这个问题本质上听起来很简单,但我找不到安全简单的解决方案。

问题如下,我有一个项目,我想从私有 git 存储库中提取依赖项以构建运行时环境,然后删除 SSH 密钥和 SSH 密码。我不能跳过密码短语,因为它是由 git remote repos 强制执行的。

  1. 我很难推送 SSH 密码,因此 SSH 不会要求输入密码
  2. 我很难理解如何安全地做到这一点

我该怎么做的问题,所以该方法也将是安全的?

我在 Docker 中操作,可能可以在其上安装任何开源软件。

【问题讨论】:

  • 我通常做的是删除密码短语,克隆 repo,将密码短语放回原处。我想你已经明确表示你的遥控器已经强制使用密码,所以你不能删除它并克隆?我的理解正确吗?
  • 是的,这正是问题所在。它是强制的,所以我必须克服它。我也无法控制组织的政策。
  • 我倾向于在 Docker 空间之外运行所有 git 操作。这避免了将密钥获取到图像中的问题,以及泄漏它的可能性;它让我可以构建任意分支或工作代码;并且它避免了 Docker 不会重复 RUN git clone 行认为它是幂等的问题。
  • @DavidMaze 在我的情况下它不起作用,因为 SSH 连接是构建 Git 中的项目依赖项。这意味着我需要构建一个所有依赖项都在外部的项目,但本地机器、云和 CI/CD 管道中的本地环境可能会有所不同,所以在这种情况下我根本不会使用 Docker 的强大功能。它使 Docker 的使用受到质疑,而 Docker 不是我可以在这个项目中放弃的东西。
  • Dockerfile 和其他工件放入存储库本身。 git clone ... && docker build。您仍然会从一致的源代码树中获得一致的结果。

标签: git docker security ssh sshpass


【解决方案1】:

启用buildkit

docker build 有一个 --ssh 选项,允许 Docker Engine 转发 SSH 代理连接。

您可以将您的私钥ssh-add 转为ssh-agent

来自ssh-addman 页面:

如果任何文件需要密码,ssh-add 会要求用户输入密码。

来自ssh-agentman 页面:

这个想法是代理在用户的本地 PC、笔记本电脑或终端中运行。身份验证数据不需要存储在任何其他机器上,并且 身份验证密码永远不会通过网络。但是,与代理的连接是通过 SSH 远程登录转发的,用户可以 因此使用网络中任何地方的身份赋予的特权 一种安全的方式。

ssh-agent 永远不会通过其请求通道发送私钥。 ...

来自文档的示例Dockerfile

# syntax=docker/dockerfile:experimental
FROM alpine

# Install ssh client and git
RUN apk add --no-cache openssh-client git

# Download public key for github.com
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

# Clone private repository
RUN --mount=type=ssh git clone git@github.com:myorg/myproject.git myproject

构建镜像:docker build --ssh default

【讨论】:

  • 有一个注意事项,在 Windows 中default 不起作用,因此您需要指定完整的通行证default=C:/.ssh/id_rsa(或您的id_rsa 文件位置)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 2015-10-18
  • 2017-01-16
相关资源
最近更新 更多