如何在Ansible CLI中使用sudo密码哈希运行Playbook?
使用密码哈希设置
ansible_sudo_pass并运行Playbook 问题描述
原本通过CLI传入明文密码运行Playbook的命令:
ansible-playbook -i inventory/inventory.yml playbooks/changedefaults.yml --extra-vars "ansible_sudo_pass=password"
现在需要传入密码的哈希值,但直接使用示例命令会因Shell解析问题导致哈希值被篡改,无法被正确识别。
解决方法
1. 正确传递哈希值(避免Shell解析$符号)
Shell中$是变量引用前缀,哈希值里的$会被Shell尝试解析成变量,导致哈希值损坏。有两种可靠的解决方式:
用单引号包裹整个
--extra-vars内容:单引号会阻止Shell解析内部的特殊字符,直接传递原始哈希值:ansible-playbook -i inventory/inventory.yml playbooks/changedefaults.yml --extra-vars 'ansible_sudo_pass=$6$rounds=656000$nv6b5eRCf0MA3Uth$YLcyFUT63rTMB8crCejv5IdyOYIpv62l5FVt.jjw4cNuqPX8HyYwmx/w48SFq/LJtYLrEV92mje7jV0Nfm/9g0'转义哈希中的每个
$符号:在每个$前添加反斜杠\,让Shell把它当作普通字符处理:ansible-playbook -i inventory/inventory.yml playbooks/changedefaults.yml --extra-vars "ansible_sudo_pass=\$6\$rounds=656000\$nv6b5eRCf0MA3Uth\$YLcyFUT63rTMB8crCejv5IdyOYIpv62l5FVt.jjw4cNuqPX8HyYwmx/w48SFq/LJtYLrEV92mje7jV0Nfm/9g0"
2. 确认哈希格式有效性
确保你使用的哈希是目标Linux系统sudo命令能识别的格式,比如示例中的SHA-512哈希(以$6$开头)。如果需要生成对应哈希,可以用系统自带的mkpasswd工具:
mkpasswd --method=sha-512
输入密码后即可生成符合要求的哈希值。
3. 检查变量优先级
确认没有其他位置的ansible_sudo_pass变量覆盖CLI传入的值,比如:
- Inventory文件或
host_vars/group_vars中的定义 - Playbook内部的变量定义
- Ansible配置文件中的相关设置
内容的提问来源于stack exchange,提问作者gelato grande
相关产品推荐
相关产品推荐

