这既不是一个安全的想法,也不是我推荐的,但我遇到过一种情况,我的 Ansible 临时命令偶尔需要一段时间才能响应。我希望使用管道或参数或任何需要的东西将所需的文本推送到提示符中,这样我就可以离开并知道它会完成。
前任:
$ ansible all -m shell -a "reboot" --ask-pass
Password:
blah blah blah it worked
我很想发送一个参数或者<<
其他东西来获取密码。可以吗?
答案1
您可以使用预计完成此类任务。
这是一个起点:
spawn ansible all -m shell -a "reboot" --ask-pass
expect "Password:"
send "secret\r"
expect eof # from this point it depends on the behavior of Ansible...
将此代码片段保存到文件中reboot-ansimble.sh
,然后使用以下命令运行它:
expect reboot-ansimble.sh
附言:如果预计未安装您应该能够从默认存储库中获取它:
sudo apt-get install expect
答案2
我可以建议切换到基于密钥的身份验证吗?https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server
基于密钥的身份验证允许您无需密码即可登录服务器,并且比密码安全得多。我在 Ansible Galaxy 中有一个角色,用于管理用户和密钥:https://galaxy.ansible.com/list#/roles/4840