Ansible从以下代码请求sudo密码,它尝试创建一个新的postgres用户。
错误讯息:
致命:[xxx.xxx.xxx.xxx] =>缺少sudo密码
main.yml
- name: 'Provision a PostgreSQL server'
hosts: "dbservers"
sudo: yes
sudo_user: postgres
roles:
- postgres
create_db.yml
- name: Make sure the PostgreSQL users are present
postgresql_user: name=rails password=secret role_attr_flags=CREATEDB,NOSUPERUSER
sudo_user: postgres
sudo: yes
用于登录此计算机的remote_user是非root 用户,没有密码,只能使用密钥身份验证登录。
对于用户 postgres ,此帐户也没有密码,因为刚刚安装了数据库。
由于我以非 -root用户身份登录,因此当切换到 postgress 帐户以创建数据库用户时,它会询问密码。但是,如果从root帐户切换到 postgres ,则不需要密码。所以,我想知道是否有办法切换到root,然后切换到用户 postgres 。
注意:root帐户没有公钥,没有密码,也无法从SSH登录。
答案 0 :(得分:14)
您可以在运行Ansible剧本时指定sudo密码:
ansible-playbook playbook.yml -i inventory.ini --extra-vars "ansible_sudo_pass=yourPassword"
答案 1 :(得分:3)
在我的情况下,我将信息添加到服务器组的组变量中
因此在/ etc / ansible / group_vars / {servergroup} / vars
我添加了
ansible_become: yes
ansible_become_method: sudo
ansible_become_pass: "{{ vault_ansible_password }}"
本文帮助我锻炼了答案https://www.cyberciti.biz/faq/how-to-set-and-use-sudo-password-for-ansible-vault/
答案 2 :(得分:2)
尝试:
我有类似的问题,我以前用-k -K(大写)运行我的剧本。该剧本将提示您输入密码。
ansible-playbook mail.yml -k -K
希望有帮助!
答案 3 :(得分:1)
如果您选择“启用特权升级”选项,这将在Ansible Tower UI中发生。您可能需要在Ansible Tower中提供两次密码。
答案 4 :(得分:1)
将此添加到您的/ etc / sudoers文件
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
username-u-want-to-allow ALL=(ALL) NOPASSWD: ALL
答案 5 :(得分:1)
如果上述所有解决方案均不适用于您,那么我就是这种情况。我的问题是ansible_user并没有所有权限,我不想让root从ssh连接。
但是我的测试者用户不具备执行某些操作的所有sudo权限: 初始tester_user权限:
tester ALL= NOPASSWD:ALL # bad
更改为:
tester ALL=(ALL:ALL) NOPASSWD:ALL # good
这些附加字段的含义是: 第一个“ ALL”表示用户可以以所有用户身份运行命令。 第二个“ ALL”表示用户可以将命令作为所有组运行。
最初希望限制维护者的权限,但是必须强制ansible_user运行命令,因为所有用户都在Ansible中使用turn_user。
答案 6 :(得分:1)
在您的远程服务器(客户端-服务器)或(目标-服务器)中,无论您调用什么,以 root 用户身份编写此命令
<块引用>visudo pressenter 下
<您在(客户端-服务器)上的姓名> ALL=(ALL) NOPASSWD: ALL 保存存档 现在从您的控制器服务器(工作站)或(Ansible-Server)无论您调用什么,运行您的命令
<块引用>ssh
答案 7 :(得分:0)
您需要修改/etc/sudoers
文件,以允许连接到删除服务器的用户切换到另一个没有密码提示的用户。
答案 8 :(得分:0)
如果用于建立连接的ssh_user属于sudoers组,则不需要指定 sudo_user ,只需说 sudo_pass 。
答案 9 :(得分:0)
使用以下内容将文件添加到名为postgres的目标计算机上的/etc/sudoers.d
目录中:
postgres ALL=(ALL) NOPASSWD:ALL
这可以确保postgres用户(假设您将其用作sudo用户)在尝试sudo命令时不会被要求输入密码。
如果您使用其他用户连接目标计算机,则必须修改上述内容,以便为该用户授予NOPASSWD权限。
有关详细信息,请参阅here。
答案 10 :(得分:0)
我的解决方案/错误消息的解决方法: 致命:[节点]:失败! => {“ msg”:“缺少sudo密码”}
对我来说,尽管用户已经存在于远程主机上的sudoers文件中,无需使用密码即可执行命令,但我仍然收到此消息。我在YAML主要游戏手册中输入的内容如下:
---
- hosts: [your targeted inventory list of hosts]
become_user: [your remote privileged user]
become: true
roles:
- [your playbook role]
还在/etc/ansible/ansible.cfg中,我启用/注释或更改了以下内容:
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[defaults]
remote_tmp = /tmp/ansible-$USER
host_key_checking = False
sudo_user = [your remote privileged user]
ask_sudo_pass = False
ask_pass = False
条目 remote_tmp = / tmp / ansible- $ USER 是为了避免显示诸如以下消息:
OSError: [Errno 13] Permission denied: '/etc/.ansible_tmpLyoZOOyum.conf'
fatal: [node]: FAILED! => {"changed": false, "msg": "The destination directory (/etc) is not writable by the current user. Error was: [Errno 13] Permission denied: '/etc/.ansible_tmpLyoZOOyum.conf'"}
答案 11 :(得分:0)
就我而言,我通过在 /bin/sh
行中添加命令 /etc/sudoers
以允许在没有密码的情况下执行命令来解决它。
这是显示的错误:
BECOME password:
debian | FAILED! => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"module_stderr": "Shared connection to debian9 closed.\r\n",
"module_stdout": "\r\n",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1
}
只添加这个:
user ALL= NOPASSWD: /usr/bin/id, /usr/bin/whoami, /bin/sh
出于测试目的,我还添加了 id
和 whoami
。
答案 12 :(得分:0)
就我而言,即使密码正确,我也会收到此错误,因为 playbook 指定了“连接:本地”。该剧本将连接类型设置为本地,因为所有命令都应该在本地主机上运行。添加需要委托给远程主机的新任务后,连接方法仍然设置为本地,导致丢失 sudo 密码错误。通过删除剧本中的“连接:本地”修复了该错误。
答案 13 :(得分:-1)
random ALL =(全部)NOPASSWD:全部 为我工作