Base64编码正在添加新行

Dei*_*ers 8 base64 kubernetes

我正在尝试在 Linux 命令行上使用 base64 对数据库字符串进行编码。

一旦我这样做,我就会将该值添加到 kubernetes 中的秘密中,但由于数据库字符串不被接受,我的应用程序无法连接到数据库。当我检查镜头中的值时,似乎添加了换行符,而同一秘密中的类似集群中不存在换行符

jdbc:postgresql://test.xxxxxxxx.eu-west-2.rds.amazonaws.com/test

deirdre$ echo jdbc:postgresql://test.xxxxxxxx.eu-west-2.rds.amazonaws.com/test | base64 | tr -d "\n"
amRiYzpwb3N0Z3Jlc3FsOi8vdGVzdC54eHh4eHh4eC5ldS13ZXN0LTIucmRzLmFtYXpvbmF3cy5jb20vdGVzdAo=
Run Code Online (Sandbox Code Playgroud)

我做错了什么吗?或者 / 有问题吗?

小智 18

您可以轻松修复这些问题

echo -n "string" | base64
Run Code Online (Sandbox Code Playgroud)

“echo -n”删除结尾的换行符。

您还可以看到我对以下问题 Kubernetes Secret 作为环境变量添加空格字符给出的最后一个答案


mea*_*gqo 9

问题在于,base64 添加换行符是为了与具有最大行宽的旧系统兼容。您可以将 -w 0 选项添加到 base64 命令来更改行为,使其不再添加新行。

在你的例子中这将是

echo "jdbc:postgresql://test.xxxxxxxx.eu-west-2.rds.amazonaws.com/test" | base64 -w 0
Run Code Online (Sandbox Code Playgroud)

这导致

amRiYzpwb3N0Z3Jlc3FsOi8vdGVzdC54eHh4eHh4eC5ldS13ZXN0LTIucmRzLmFtYXpvbmF3cy5jb20vdGVzdAo=
Run Code Online (Sandbox Code Playgroud)

编辑:

printf "%s" jdbc:postgresql://test.xxxxxxxx.eu-west-2.rds.amazonaws.com/test | base64 -w 0 
Run Code Online (Sandbox Code Playgroud)

产生正确的输出,在 Base64 编码的字符串中添加一个额外的换行符,这显然是 url 被识别为正确结束所必需的

  • 你好。抱歉,我好像看错问题了。因为 base64 还每 76 个字符添加额外的 '\n' 字符。您可以尝试使用以下输出: "printf "%s" jdbc:postgresql://test.xxxxxxxx.eu-west-2.rds.amazonaws.com/test | base64 -w 0" 如果这不起作用我我目前没有其他想法 (2认同)