【问题标题】:How can I mount a user's existing .ssh directory into a Docker container?如何将用户现有的 .ssh 目录挂载到 Docker 容器中?
【发布时间】:2015-01-20 01:28:12
【问题描述】:

我在 Windows 7 上使用 boot2docker。VirtualBox 正在将我的 Windows ~/.ssh 目录从 Windows (c:\Users\Me\.ssh) 安装到 boot2docker VM (/c/Users/Me/.ssh) 中。

我的 Dockerfile 正在配置要用作开发环境的映像。它将一组 SSH 密钥和用于自动部署的配置复制到容器中。这工作正常。容器启动时,会自动在镜像中克隆一个git仓库,不提示。

我现在尝试使用相同的映像,但允许用户通过docker run -v ... 挂载他们自己的 .ssh 目录,以便他们可以选择使用自己的 SSH 密钥。当我通过在运行容器的命令中添加 -v /home/myself/.ssh:/home/guest/.ssh 来执行此操作时,我收到关于权限太开放的 SSH 警告:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/home/guest/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/guest/.ssh/id_rsa

我尝试在 ENTRYPOINT 脚本中添加一行到 chmod -R 700 /home/guest/.ssh,但它似乎无效或在安装卷之前执行。

我还尝试从正在运行的容器中更改/home/guest/.ssh 的权限,但无法这样做。运行chmod -R 700 /home/guest/.ssh 时没有出现错误,但权限没有改变。

我在另一个关于 Docker 卷权限的问题中看到提问者使用 ACL 的建议,但我不知道这是否是个好主意,或者它是否会起作用。

无论如何,允许用户在 Docker 容器内使用自己的 SSH 密钥和 SSH 配置的最简单方法是什么?

【问题讨论】:

  • 您可以在 shell 启动时将 .ssh 文件复制到一个新目录并对其进行 chmod。
  • 因此,例如,将 Dockerfile COPY id_rsa* 和配置复制到 /home/guest,并在 ~/.profile 中将 /home/guest/id_rsa* 复制到 /home/guest/.ssh / 并避免安装外部 .ssh 卷?
  • 哦,不,我想我明白了。仍然通过卷向容器提供 SSH 文件,但使用 shell 将它们复制到 .ssh。好的。我会试一试。
  • @Bryan Brilliant!如果它没有让你觉得很笨拙,那对我来说很好。谢谢。
  • 将信息复制到答案中,因此此 qn 不会显示为“未回答”

标签: docker ssh-keys boot2docker


【解决方案1】:

有点笨拙,但您可以在 shell 启动时将 .ssh 文件复制到一个新目录并对其进行 chmod。

即通过卷向容器提供 SSH 文件,但使用 shell ~/.profile 将它们复制到 ~/.ssh。

【讨论】:

  • 如果你使用的是 vscode 开发容器,你可以使用postCreateCommand 来复制和修改 ssh 文件。此时创建一​​个postCreateCommand.sh 脚本并在postCreateCommand 中调用它通常是有意义的
猜你喜欢
  • 2022-10-05
  • 2016-06-10
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
相关资源
最近更新 更多