这是我的脚本的一部分
sudo bash -c "printf '%s\n' \
'user-test:' \
' hash: \"$HASHED_PASSWORD\"' \
' reserved: true' \
' backend_roles:' \
' - \"admin\"' \
' description: \"admin user\"' >> /etc/opensearch/opensearch security/internal_users.yml"
是$HASHED_PASSWORD
使用usr/share/opensearch/plugins/opensearch-security/tools/hash.sh
它以这种格式生成
$2y$12$M44wSxuwYbYRUqRKf1IUAuY5jvBlh4tu5XVx7/PO6SqvPjuXzJaCK
我希望将这个精确的值写入/etc/opensearch/opensearch security/internal_users.yml
文件中,但无法做到这一点,因为 $2、$12、$M 被视为变量。
实际的写法是这样的。
user-test:
hash: "y2/PO6SqvPjuXzJaCK"
reserved: true
backend_roles:
- "admin"
description: "admin user"
最好将其作为参数传递给你的 bash 脚本,而不是直接插入它:
这全是关于引用。
我创建了一个本地文件来测试它。
如果密码数据未在环境中导出或传入,则会失败。
传递它 -
(是的,我在 yaml 中添加了一条解释性注释,但它也是一个 yaml 注释。)
您可以内联设置值 -
或者导出 -
我将整个 yaml 字符串放在一组外部单引号中,并嵌入换行符以简化操作。使用它的命令放在双引号中,这样单引号就只是字符串中的数据,并且它是双引号插入的,因此 var值作为数据进入,不会重新插入。所有这些都传递给
bash -c
,所以它可以正常工作。因人而异。