【问题标题】:How to bake credential into docker image for git?如何将凭证烘焙到 git 的 docker 映像中?
【发布时间】:2018-01-13 06:19:54
【问题描述】:

这其实是我之前one的一个问题。

我正在尝试使用 docker 来托管个人笔记网络服务,并希望备份该服务生成的数据(我的笔记)。 目前我打算使用 git 来提交、拉取和推送到存储库。

要执行 git pull 和 push,我的 docker 映像需要托管我的凭据。实现这一目标的最简单但安全的方法是什么?

到目前为止我做了什么:

  • 我选择Alpine 作为我的服务图像的基础图像。
  • 因为我只需要 git 的凭据,所以我认为将 git 凭据助手放入映像中可能会解决我的问题。我可以在构建期间将凭据保存到帮助程序,并在运行时使用它们。
  • 根据this article,我搜索了一段时间并决定使用libsecret 作为我的git 凭证助手。
  • 我已安装 libsecret 并将我的 git 凭证助手设置为 git-credential-libsecret

但是,到目前为止,我还不能使 git-credential-libsecret 起作用。以下是我遇到的几个问题:

  • 首先,我测试了git-credential-libsecret get,得到如下错误:

    CRITICAL **: could not connect to Secret Service: Cannot spawn a message bus without a machine-id: Unable to load /var/lib/dbus/machine-id or /etc/machine-id: Failed to open file */var/lib/dbus/machine-id*: No such file or directory

    • 我(可能?)通过安装dbus 并运行dbus-uuidgen > /var/lib/dbus/machine-id 解决了这个问题
  • 然后我尝试再次运行git-credential-libsecret get。这一次,它报告说:

    CRITICAL **: could not connect to Secret Service: Cannot autolaunch D-Bus without X11 $DISPLAY

    • 我尝试安装 dbus-x11 并运行 dbus-launch --sh-syntax(from here) 但这次没有运气。错误仍在继续。

总之,我想知道:

  1. 我是否在正确的方向(使用 git credential helper)来实现我的目标?
  2. 如果是这样,我该如何解决 X11 问题?
  3. 有没有其他快速干净的方法来备份 docker 中的数据并带有版本控制?

【问题讨论】:

  • 还有,为什么不能使用git-credential-store?它似乎没有使用 X11 dbus 或其他任何东西
  • 人们会花时间回答您的问题。作为回报,您应该为之前的问题标记一个答案,并为优秀的 cmets +1。
  • @max630 我选择不使用 git-credential-store 因为它以纯文本形式保存密码。但也许我只是偏执。
  • 我对 libsecret 了解不多,但它似乎是某种密码管理器,可以使用主密码加密密码,用户可以交互输入以解密密码。但是由于您要以非交互方式运行它,因此图像无论如何都必须包含密码,可能会以某种方式混淆。
  • 是的,我想你可能是对的。不管凭证助手如何对序列化密码进行加密,当一个坏人以某种方式完全控制我的容器时,他/她可以简单地通过凭证助手接口检索密码(因为凭证助手认为坏人已经过身份验证)。我以前没有考虑过。

标签: linux git authentication docker alpine


【解决方案1】:

如果您的 git 提供程序支持使用公钥的 ssh,我认为最简单的方法是切换到它们。您也不必复制您的密码。

你需要:

【讨论】:

  • 在您看来,泄露时哪个更安全或对我的整体隐私造成的损害更小?在镜像 V.S. 中放置一个 SSH 私钥使用 git-credential-store 将纯文本帐户密码对保存在图像中。
【解决方案2】:

这取决于你在哪里运行 git-credential-libsecret:你需要将它安装在你的镜像/容器中,而不是主机上。

请注意,另一种选择是使用卷(请参阅my answer to your previous question),在这种情况下,git 只能安装在主机上。

但是在这里,你会直接在你的镜像中使用 git,这意味着,as in this Dockerfile,你需要在你的 Dockerfile 中拥有:

RUN apt-get update -y &&
apt-get install --no-install-recommends -y libsecret-1-0 git

https://github.com/electron-userland/electron-builder/blob/master/docker/base/Dockerfile

【讨论】:

  • 是的,我确实在我的 Alpine 映像中安装并运行了 git-credential-libsecret。 (我确实花了一些时间来编译它。)这就是为什么我对 X11 问题如此困扰,因为我认为不可能在我的映像中运行 X11。
  • 也许有一个编译选项可以指定不使用任何方式的 x11 依赖?
  • 这是一个很好的观点。但是,我在其 Makefile 中看不到任何选项。我不太确定 libsecret 的作用是什么。我从某处看到它是访问秘密服务的接口。在 Alpine 上,它似乎是 secret-tool。并且运行 secret-tool 也会得到 X11 错误。
  • 你也可以使用.netrc,它由Git(通过curl)支持,没有依赖关系。
猜你喜欢
  • 2018-08-25
  • 2011-12-18
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
相关资源
最近更新 更多