尽管以root身份登录,但Ansible的Root权限问题

时间:2015-01-19 07:26:09

标签: permissions installation root ansible

我正在尝试自动化一个简单的软件包安装例程:

  1. 将包文件复制到远程(Solaris)主机
  2. root
  3. 登录
  4. 执行pkgadd <pkg_name>
  5. 手动执行时效果非常好,但Ansible在pkgadd步骤中失败,出现“错误:数据库只能作为root访问”,在手动完成相同的过程时从未发生过:

    ---
    - name: deploy JRE
      synchronize: src={{jre_path}} dest={{remote_pkg_repo}}
    
    - name: install JRE
      command: pkgadd {{jre_name}}  chdir={{remote_pkg_repo}}
    

    我确定Ansible正在使用root用户,一个简单的调试语句向我显示它以uid=0(root) gid=0(root)身份登录,但仍然发生该错误。这是怎么回事?

    PS:远程计算机上没有安装sudo可以使用。

    更新

    使用远程SSH命令执行pkgadd命令时,我可以重现错误:

    ssh root@<remote_host> 'cd <remote_pkg_repo>; pkgadd <pkg_name>'
    

    此远程SSH呼叫与手动登录有什么区别?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决上述问题的方法。由于Ansible通过SSH登录到远程主机,只有一个&#34;远程shell&#34;已创建(与手动登录相比,似乎缺少某些环境配置)。

因此,为了使Ansible以root远程登录并执行具有完整root权限的命令,您必须在Ansible playbook中设置环境变量NONABI_SCRIPTS=true

---
- hosts: <your_host>
  remote_user: root

  vars:
  # set the environment in a task to avoid a remote shell
  # but enforce a real local shell:
    enforce_local_shell:
      NONABI_SCRIPTS: true

然后在Ansible任务中添加environment

- name: install JRE
  command: pkgadd {{jre_name}}  chdir={{remote_pkg_repo}}
  environment: enforce_local_shell

有关设置Ansible环境的更多信息,请访问here