我有一个YAML文件,其中包含ssh私钥。在密钥轮换过程中,我需要用新的密钥替换该密钥。我通过Ansible执行此过程,因此可以使用本机Ansible模块,bash命令或自定义python过滤器。文件格式必须保持。一些值以单引号样式指定:
my_new_key: 'This is a value'
但ssh键指定为文字:
ssh_key_data: |
AKJHAKJHHJLKJAHSDDKJHSADKJHKJS
LKJAHSDLKJH*&EYIUHCS*&YCHIJHSK
我尝试使用pyyaml,但这不符合原始文件的格式,并且将所有内容设置为相同的样式,即所有单引号或所有文字。使用此文件的下游系统对格式特别挑剔,因此我需要对其进行维护。 我将当前的ssh密钥作为变量,因此可以使用它来搜索文件,但是文件中的密钥可以缩进任意数量的空格,而变量中的缩进则不会缩进。此外,密钥可能包含斜杠,可以将其解释为转义序列。我尝试使用 sed
sed -i 's%{{ current_key }}%{{ new_key }}%g'
但是我收到有关未终止的's'命令的错误。结构如下所示。
- name: bob_dylans_trousers
stuff: egg_shells
content:
ssh-key-data: |
-----BEGIN RSA PRIVATE KEY-----
MIIJKAIBAAKCAgEAtjd9po0fzwXpazk9uM9pNXdxAR3MSDfE0DAWP+37l4DanG6A
CI3nOoaQRPCrqvOh03Yu1aab8nmavHSMClCfQjy2+BfoYh9EkG+OEtBlZj68TnGl
HuLhX4IyyTar1+Xx7+4Ki8H9dKp/r9bYjiCZOYFe6bkiwjwwlIa6zGJzeDE+kLyk
Ey56rSIA0gAF4RSKqGhnez2fpmMn+DegPE5Zs1wSEnKKZ8r6Cid3D5NRpJj5HOwc
ma581lB5BosNW394WukkuTDk6lI1v7uGT7O78lpTO6FknvoFO/S+f+dXwVYZU8XX
6mDiMzfRh5eDbrk4KdHIRT5w0n0pgAhhUC2tm+SkYCETrKIakfhAj7RQ0CYCHBVB
-----END RSA PRIVATE KEY-----
请记住,有人可以建议一种在保持格式的同时替换文件中密钥的方法吗?