【问题标题】:Pull ssh keys in docker container at runtime在运行时在 docker 容器中拉取 ssh 密钥
【发布时间】:2017-09-25 21:41:34
【问题描述】:

我正在创建一个 nodejs 应用程序,它将与 Git 存储库集成并执行推送、拉取提交等操作。我正在将应用程序移动到 Docker。 但是我找不到在运行时将 ssh 密钥放入 docker 映像的方法。出于安全原因,我想避免在构建时在 docker 映像中复制 ssh 密钥。

我尝试在运行时将 ssh 密钥作为环境变量传递,例如:

docker run -i -t -e KEY="sshkey" imagename

并在 node.js 中手动创建 ssh 文件夹和 ssh 密钥

mkdirSync('/root/.ssh/', (err) => {
    writeFileSync('/root/.ssh/id_rsa.pub', sshKey, (err) => {
    })
})

但这似乎不起作用,我在尝试克隆 repo 时仍然遇到权限错误。

  1. 我需要做些什么来加载 ssh 密钥以便 git 可以使用它们吗?
  2. 有没有办法使用 Dockerfile 来做到这一点。我知道我可以在构建时添加它,但还没有找到在运行时执行它的方法。
  3. 如何检查正在运行的 docker 容器的 fs?

【问题讨论】:

  • 你不能只做一个卷/文件挂载吗?

标签: node.js git ssh docker dockerfile


【解决方案1】:

以下人为设计的示例演示了如何从容器中读取主机上的私钥。

docker run -it --rm -v ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro ubuntu cat /root/.ssh/id_rsa

这应该让以 root 身份运行的进程使用您的凭据进行身份验证。

【讨论】:

    【解决方案2】:
    1. 如果您想通过 SSH 进行身份验证,则需要添加您的 私有 密钥,而不是您的公共密钥。在您的情况下,这可能是文件id_rsa。服务器使用公钥来验证您的身份。

    2. Dockerfile 仅用于构建,因此无法在运行时使用它来执行任何操作。我认为您使用环境变量的方法是合理的...

    3. 您可以通过docker exec 连接到容器,打开 bash 并像往常一样与文件系统交互:

      docker exec -it imagename /bin/bash
      

      这假设您正在运行一个带有 bash 的系统。否则,请尝试/bin/sh

    【讨论】:

    • 谢谢你,使用环境变量和私钥工作。如果其他人尝试,我必须解决一些问题:1. 使用 Dockerfile 创建密钥文件 2. 为文件提供正确的权限,以便您可以从 node.js 应用程序写入
    【解决方案3】:

    对于主机和 docker 的非 root 用户:

    docker run -v /home/<host user>/.ssh:/home/<docker user>/.ssh <image>
    

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 2020-05-21
      • 1970-01-01
      • 2020-12-27
      • 2022-10-25
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多