我正在使用具有 sudo 权限的用户以下命令运行 ansible 模块/剧本(例如 ping):
sudo ansible -m ping hosts
“hosts” 是 2 个主机的组。当我运行这个程序时,系统会要求我输入本地 sudo 密码,这没问题。然后系统会要求我在远程主机上输入 sudo(因为我在 ansible.cfg 中配置了它),这也没问题。然后我必须输入两个主机的密码,这就是我遇到问题的地方。系统在一行中要求我输入这样的密码:
Enter passphrase for key '/home/myuser/.ssh/id_rsa':Enter passphrase for key '/home/myuser/.ssh/id_rsa':
因此我只需输入完全正确的密码(从 keypass 复制)并输入即可。然后系统再次要求我输入密码,现在仅要求输入一次:
Enter passphrase for key '/home/myuser/.ssh/id_rsa':
所以我再次输入密码……然后系统再次询问我,直到 ssh 挂了,主机无法访问。奇怪的是,有时我只需在第一次尝试时按“enter”键就可以让它工作,然后输入密码,第二个主机突然就工作了。当我再次运行它时,系统只要求我输入一次密码(对于之前失败的主机),我输入密码,现在它就可以工作了……我当时想,这到底是怎么回事?
这是 Ansible 中的错误还是我做错了什么?如果我只是 ssh 到我的主机,它绝对可以正常工作。尝试以多种详细程度运行我的 ansible 命令,没有发现任何问题。有什么想法吗?
答案1
首先,您不需要在本地使用 sudo 来运行该命令。因此,请省去在本地无缘无故使用 sudo 的麻烦。
接下来,您不需要密码即可 ping 目标。这足够了:
$ ansible all -i /tmp/hosts2ping -m ping
...其中 hosts2ping 包含您的主机列表。
如果您在远程执行需要以非root身份登录的操作,那么您需要指定-k(或将“ask_pass = True”添加到~/ansible.cfg):
$ ansible all -i /tmp/hosts2ping -a id -k
SSH password: <enter password>
10.1.2.3 | SUCCESS | rc=0 >> uid=nnnn<non-root-account>.....
...但对所有主机仅应提示一次。
如果您需要执行 root 任务,也请使用 -Kb...
$ ansible all -i /tmp/hosts2ping -a id -k -Kb
SSH password: <enter password>
SUDO password[defaults to SSH password]: <RETURN>
10.1.2.3 | SUCCESS | rc=0 >> uid=0(root).....
如果您的 ssh 密钥已部署在目标上,请将其加载到 ssh-agent 中,您就不需要 -k...
$ ssh-add
Enter passphrase for .ssh/id_rsa:
identity added: .ssh/id_rsa
$ ansible all -i /tmp/hosts2ping -a id # -k not needed
10.1.2.3 | SUCCESS | rc=0 >> uid=nnnn<non-root-account>.....
...ssh-agent 完成所有工作。
但是,如果在远程执行 root 操作,您仍然需要 -Kb,但不会提示输入非 root 密码(因为 ssh-agent 会这样做)...
$ ansible all -i /tmp/hosts2ping -a id -Kb # -k not needed
SUDO password[defaults to SSH password]: <RETURN>
10.1.2.3 | SUCCESS | rc=0 >> uid=0(root).....
编辑:通常,sudo 仅允许您的非 root 帐户“将用户设置为”另一个用户,通常是 root 本身。那么,您要进入共享帐户执行特权操作吗?这应该仍然有效。只需更改“成为”选项以指定共享帐户(而不是默认为 root),例如:
$ ansible all -i /tmp/hosts2ping -a id -k -Kb --become-user=<shared-account>
SSH password: <enter password>
SUDO password[defaults to SSH password]: <RETURN>
10.1.2.3 | SUCCESS | rc=0 >> uid=43526(<shared-account>).....
答案2
一个选项是将您的密钥添加到ssh-agent
使用中ssh-add
。这样您就不会再得到这个了。
答案3
当我尝试通过堡垒主机 (jumpbox) 使用 Ansible 时,我遇到了这个问题。解决方法是:
yum 更新