Linux 如何将凭证烘焙到git的docker映像中?

Linux 如何将凭证烘焙到git的docker映像中?,linux,git,authentication,docker,alpine,Linux,Git,Authentication,Docker,Alpine,这实际上是我之前的一个问题 我正在尝试使用docker托管一个个人笔记web服务,并希望备份该服务生成的数据(我的笔记)。 目前,我计划使用git提交、拉取和推送到存储库 要执行git拉和推,我的docker映像需要承载我的凭据。实现这一点最简单但安全的方法是什么 到目前为止我所做的: 我选择Alpine作为我的服务映像的基础映像 因为我只需要git的凭据,所以我认为将git凭据助手放入映像中可以解决我的问题。我可以在构建时将凭据保存到帮助器,并在运行时使用它们 我在谷歌上搜索了一会儿,并决定

这实际上是我之前的一个问题

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

要执行git拉和推,我的docker映像需要承载我的凭据。实现这一点最简单但安全的方法是什么

到目前为止我所做的:

  • 我选择
    Alpine
    作为我的服务映像的基础映像
  • 因为我只需要git的凭据,所以我认为将git凭据助手放入映像中可以解决我的问题。我可以在构建时将凭据保存到帮助器,并在运行时使用它们
  • 我在谷歌上搜索了一会儿,并决定使用
    libsecret
    作为我的git凭证助手,据介绍
  • 我已经安装了
    libsecret
    ,并将我的git凭证帮助程序设置为
    git凭证libsecret
但是,到目前为止,我无法使
git-credential-libsecret
正常工作。以下是我遇到的几个问题:

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

    CRITICAL**:无法连接到特勤局:无法生成没有机器id的消息总线:无法加载/var/lib/dbus/machine id或/etc/machine id:无法打开文件*/var/lib/dbus/machine id*:没有此类文件或目录

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

    CRITICAL**:无法连接到特勤局:无法在没有X11$DISPLAY的情况下自动启动D-Bus

    • 我试图安装
      dbus-x11
      并运行
      dbus-launch--sh syntax
      (),但这次没有成功。错误还在继续
最后,我想知道:

  • 我是否朝着正确的方向(使用git credential helper)实现我的目标
  • 如果是,如何解决X11问题
  • 在docker中,是否有其他快速、干净的方法使用版本控制备份数据

  • 这取决于您运行git credential libsecret的位置:您需要将其安装在映像/容器中,而不是主机上

    请注意,另一个选项是使用卷(请参阅),在这种情况下,
    git
    只能安装在主机上

    但在这里,您可以在图像中直接使用git,这意味着您需要在Dockerfile中包含:

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

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

    您需要:

    • 将ssh客户端添加到docker映像
    • 并将其复制到图像中。不需要
      ssh代理
      部分

    还有,为什么您不能使用?它似乎不使用X11 DBU或任何人花时间回答您的问题的东西。作为回报,您应该为前面的问题标记一个答案,为好的评论标记+1。@max630我选择不使用git credential store,因为它以纯文本形式保存密码。但也许我只是有点偏执。我对libsecret知之甚少,但它似乎是一种密码管理器,可以用主密码加密密码,用户可以通过交互方式输入主密码来解密密码。但是,由于你要以非交互方式运行它,因此图像无论如何都必须包含密码,可能会以某种方式混淆。是的,我认为你可能是对的。无论凭证助手如何加密序列化密码,当坏人以某种方式完全控制我的容器时,他/她可以通过凭证助手接口检索密码(因为凭证助手认为坏人已通过身份验证)。我以前没有想过,是的,我在我的阿尔卑斯山映像中安装并运行了git credential libsecret。(我确实花了一段时间来编译它。)这就是为什么我对X11问题如此困扰,因为我认为不可能在我的映像中运行X11。也许有一个编译选项可以指定不使用任何方式的X11依赖项?这是一个很好的观点。但是,我在它的Makefile中看不到任何选项。我不太清楚libsecret的角色是什么。我从某处看到,这是一个访问特勤局的接口。在阿尔卑斯山上,它似乎是
    秘密工具
    。运行
    secret tool
    也会出现X11错误。您还可以使用一个
    .netrc
    ,它由Git(通过curl)支持,没有任何依赖关系。您认为,在泄漏时,哪个更安全或者对我的整体隐私造成的损害更小?在映像V.S.中放置SSH私钥,使用git凭据存储在映像中保存纯文本accout密码对。