Esta é uma parte do meu script
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
gerado usandousr/share/opensearch/plugins/opensearch-security/tools/hash.sh
Ele gera neste formato
$2y$12$M44wSxuwYbYRUqRKf1IUAuY5jvBlh4tu5XVx7/PO6SqvPjuXzJaCK
Quero que esse valor exato seja escrito no /etc/opensearch/opensearch security/internal_users.yml
arquivo, mas não é possível, pois $2, $12, $M são tratados como uma variável.
É assim que realmente está escrito.
user-test:
hash: "y2/PO6SqvPjuXzJaCK"
reserved: true
backend_roles:
- "admin"
description: "admin user"
Provavelmente é melhor passá-lo como um argumento para seu script bash, em vez de interpolá-lo diretamente:
Isto é tudo sobre citações.
Criei um arquivo local para testá-lo.
Se os dados da senha não forem exportados no ambiente OU transmitidos, ocorrerá falha.
Passe para dentro -
(Sim, adicionei um comentário explicativo que acaba no yaml, mas também é um comentário do yaml.)
Você pode definir o valor em linha -
Ou exporte-o -
Coloquei toda a string yaml em um conjunto externo de aspas simples com suas quebras de linha incorporadas para simplificar um pouco. O comando que o usa está entre aspas duplas para que as aspas simples sejam apenas dados na string, e é interpolado entre aspas duplas, então o valor var entra como dados e não é reinterpolado. Tudo isso é passado para o
bash -c
, então funciona.Sua milhagem pode variar.