如何向 Docker 添加 ssh 密码并在使用后将其删除?

Dmy*_*kyi 5 git security ssh docker sshpass

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

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

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

问题是我怎样才能做到这一点,这样该方法也将是安全的?

我正在 Docker 中运行,并且可能可以在其上安装任何开源软件。

mas*_*eyb 6

启用后buildkit

docker 版本有一个 --ssh 选项,允许 Docker 引擎转发 SSH 代理连接。

您可以将ssh-add您的私钥保存到ssh-agent.

ssh-add man页面:

如果任何文件需要密码,ssh-add则向用户询问密码。

ssh-agent man页面:

这个想法是代理在用户的本地 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
Run Code Online (Sandbox Code Playgroud)

构建图像:docker build --ssh default

  • 有一点需要注意的是,在 Windows 中“default”不起作用,因此您需要指定完整的路径“default=C:/.ssh/id_rsa”(或您的“id_rsa”文件位置) (3认同)