PassEnvironment 中带有换行符的环境变量

PassEnvironment 中带有换行符的环境变量

我编写了一个 systemd 单元,它使用 PassEnvironment 启动一个可执行脚本,将一组环境变量传递给该脚本。其中一个变量是从包含换行符的文件中读取的证书,但它根本没有传递给脚本:打印它时我没有得到任何内容。如果我删除换行符,则变量传递正确。

我无法找到将变量传递给脚本的另一种方法:所有内容都在 docker 容器内运行,我开始定义包含证书的环境变量的值,该值传递给 systemd,即容器进程,然后将其传递给脚本。我无法将证书文件挂载为 docker secret,因为所有内容都将在 Gitlab CI 中运行,因此我只能使用环境变量来传递 secret。出于安全原因,我也无法将证书放在镜像中。

那么,如何让 systemd 将我的环境变量和换行符直接传递给脚本?我在 CentOS 容器中使用 systemd 219。

答案1

systemd 故意拒绝环境变量值中的“控制”字符,其中包括换行符。(我认为这些限制可能是轻微地在更高版本中放宽了,但这对您的 v219 没有帮助。)

将机密转换为不同的格式,例如将文件使用 Base64 编码为一行 - 然后让容器的脚本对其进行 Base64 解码,然后再传递给应用程序。

相关内容