首页 文章

Ansible剧本:需要sudo密码[复制]

提问于
浏览
0

这个问题在这里已有答案:

我目前正在使用ansible,我想自动转储我的远程数据库并将转储的文件导入到我的本地数据库 . 现在,我遇到了使用 sudo 来切换用户的一些问题 .

playbook.yml

---
  - hosts: remoteserver
    vars:
      remote_db_name: dbname
      remote_filename: dbname_{{ lookup('pipe', 'date +%m-%d-%Y') }}
      local_folder: /home/alde/database_backups/

    tasks:
      - name: Dump database
        become: yes
        become_user: postgres
        shell: pg_dump -d {{remote_db_name}} > "{{remote_filename}}"

当我尝试运行 ansible-playbook playbook.yml 时,它返回: "sudo: a password is required"

enter image description here


What I have tried so far.

1)我通过添加sudo_flags尝试了this solution .

ansible.cfg

[defaults]
sudo_flags = -H -S

然后当我执行我的剧本时出现了不同的错误: "Timeout (12s) waiting for privilege escalation prompt: "

enter image description here

2)我将 timeout 增加到30 .

3)我将默认远程用户添加到sudoers文件

当我尝试使用ssh访问我的远程服务器并使用sudo su - postgres从default_user切换到postgres时's strange because there'没有密码提示


  • ansible 2.3.0.0

  • Python 2.7

  • Ubuntu 14.04

2 回答

  • -1

    尝试在主机下添加root用户 .

    ---
      - hosts: remoteserver
        remote_user: root
        become: yes
        become_user: root
        become_method: sudo
        vars:
          remote_db_name: dbname
          remote_filename: dbname_{{ lookup('pipe', 'date +%m-%d-%Y') }}
          local_folder: /home/alde/database_backups/
    
        tasks:
          - name: Dump database
            become: yes
            become_user: postgres
            shell: pg_dump -d {{remote_db_name}} > "{{remote_filename}}"
    

    您可以尝试将该行添加到 sudoer file (sudo visudo) <ssh user> ALL=(ALL) NOPASSWD:ALL 并测试它,也许有些问题 .

  • -1

    链接词汇表说:

    默认为'-H -S -n',它设置HOME环境变量,通过STDIN提示输入密码,并避免提示用户输入任何类型的密码 . 请注意,' - n'将与使用无密码的sudo身份验证冲突,例如pam_ssh_agent_auth . 在某些情况下,您可能希望添加或删除标志,但通常大多数用户不需要更改此设置::

    所以我认为尝试-n标志至少会改变一些东西,因为你似乎已经将它改为 waiting on authentication 而不是 there is no authentication 与你的最后修改 .

相关问题