如何在ansible命令中传递用户/密码

Nuv*_*uvi 19 ssh ansible ansible-ad-hoc

我想将Ansible用作另一个Python软件的一部分.在该软件中,我有一个主机列表及其用户/密码.

有没有办法将SSH连接的用户/传递传递给Ansible ad-hoc命令或以加密方式将其写入任何文件?

或者我是否理解这一切都是错误的,唯一的方法是使用SSH认证?

小智 23

与远程计算机通话时,Ansible默认假设您使用的是SSH密钥.鼓励使用SSH密钥,但也可以通过提供选项--ask-pass在需要时使用密码验证.如果使用sudo功能,并且当sudo需要密码时,也提供--ask-become-pass(以前--ask-sudo-pass已被弃用).

从未使用过该功能,但文档说你可以.

  • 实际上,库存是一个更好的选择,但不太安全,因此您可能可以在脚本中添加这些参数(可以解密它们)。[此处](http://docs.ansible.com/ansible/intro_inventory.html#non-ssh-connection-types)是如何在清单中保存用户/通行证:`ansible_user`,`ansible_ssh_pass` (2认同)

小智 14

你可以--extra-vars像这样使用:

$ ansible all --inventory=10.0.1.2, -m ping \
    --extra-vars "ansible_user=root ansible_password=yourpassword"
Run Code Online (Sandbox Code Playgroud)

  • ...然后您的凭据进入bash历史记录:/有更好的方法吗? (3认同)
  • @user1054510 如果您在发出信用证之前先按空格键,信用证不会进入 bash 历史记录。 (2认同)

小智 8

如前所述,您可以使用 --extra-vars (-e) ,但您可以将其保存到环境变量中,而不是在命令行上指定密码,这样它就不会出现在历史文件中。这样,当您关闭会话时,它也会消失。

read -s PASS
ansible windows -i hosts -m win_ping -e "ansible_password=$PASS"
Run Code Online (Sandbox Code Playgroud)


小智 8

我使用了命令

ansible -i inventory example -m ping -u <your_user_name> --ask-pass
Run Code Online (Sandbox Code Playgroud)

它会询问您的密码。

对于任何收到错误的人:

to use the 'ssh' connection type with passwords, you must install the sshpass program
Run Code Online (Sandbox Code Playgroud)

在 MacOS 上,您可以按照以下说明安装 sshpass:

  1. 下载源代码
  2. 解压并cd到目录中
  3. 。/配置
  4. 须藤进行安装

  • 发现这很有趣:在 MacOS 上,当我“brew search sshpass”时,我得到“我们不会添加 sshpass,因为它让 SSH 新手用户很容易破坏 SSH 的安全性。” 所以感谢您的指示 (2认同)