【发布时间】:2017-11-14 23:25:43
【问题描述】:
我有一个 Docker 群,我想在服务中使用秘密 RSA 密钥通过 SSH 连接到另一个容器。
我的安全策略是所有机密(密码、密钥等)都存储在与目标服务器(Swarm)不同的机器上。
实际上(我不喜欢它),在我的 Dockerfile 中我创建了一个临时目录/run/secrets:
mkdir -p /run/secrets
然后我创建伪造的id_rsa 和id_rsa.pub 文件:
touch /run/secrets/id_rsa
touch /run/secrets/id_rsa.pub
现在我创建一个符号链接:
ln -s /run/secrets/id_rsa /root/.ssh/id_rsa
ln -s /run/secrets/id_rsa.pub /root/.ssh/id_rsa.pub
我这样做是因为我没有找到复制 docker-entrypoint.sh 中的秘密的方法:在入口点中我不是 root,所以我无法在 /root 目录中复制。
所以,我已经在使用 Docker 机密,但这里的问题是容器内的机密是只读的。这会影响 SSH 的使用:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0444 for '/root/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
我无法修改我的id_rsa 文件的权限,因为它是只读的。
是否有解决方法或只是更好的方法?
谢谢
编辑 1:
我正在尝试更改构建 Docker 映像的方式,以便复制 /root/.ssh 目录中的密钥。
【问题讨论】:
-
在 Dockerfile 中,您可以使用
USER语句更改用户。此外,ssh 密钥的权限应该是600而不是444-chmod 600 <PATH_TO_KEY> -
是的,我知道,这就是我的问题。使用 Docker 的秘密,我无法更改权限,因为它们是只读的。
-
能否提供Dockerfile?
-
我唯一能告诉你的是我的 Dockerfile 继承了
postgres:9.6.5镜像。我没有在其中找到任何对USER的引用,但我正在调查 :) 感谢您的帮助! -
为什么要在入口点复制密钥而不是在构建映像时复制?
标签: docker ssh docker-swarm