ansible-由于权限问题,用户创建playbook执行失败

ansible-由于权限问题,用户创建playbook执行失败,ansible,Ansible,我是devops的新手,尝试了一段时间,现在正在查看ansible。 我已经按照大多数教程中描述的常规方式设置了ansible 1> 下载的EPL 2> 安装的ansible 3> 在控制计算机和目标计算机之间交换ssh密钥。 4> 正确配置了sshd_conf文件 现在是我用下面的代码测试ping的时候了 sudo ansible测试服务器-u admin-m ping 但当我这样做时,我得到如下输出 ansible 2.6.2 config file = /etc/ansible/ans

我是devops的新手,尝试了一段时间,现在正在查看ansible。 我已经按照大多数教程中描述的常规方式设置了ansible 1> 下载的EPL 2> 安装的ansible 3> 在控制计算机和目标计算机之间交换ssh密钥。 4> 正确配置了sshd_conf文件

现在是我用下面的代码测试ping的时候了

sudo ansible测试服务器-u admin-m ping

但当我这样做时,我得到如下输出

ansible 2.6.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.6.6 (r266:84292, Aug  9 2016, 06:11:56) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]
Using /etc/ansible/ansible.cfg as config file
Parsed /etc/ansible/hosts inventory source with ini plugin
META: ran handlers
<admin@10.0.0.47> ESTABLISH SSH CONNECTION FOR USER: admin
<admin@10.0.0.47> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=admin -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/bbbace40d6 admin@10.0.0.47 '/bin/sh -c '"'"'echo ~admin && sleep 0'"'"''
<admin@10.0.0.47> (255, '', 'Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n')
admin@10.0.0.47 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", 
    "unreachable": true
}
为了解决这个问题,我在/etc/ansible/hosts文件中添加了“ansible\u ssh\u pass”,它被解决了。平是成功的,没有——问问帕斯

现在,下一步是执行剧本 我创建了一个剧本,如下所示

 hosts: all
  tasks:
  - name: Ansible create user example.
    user:
      name: vasanth
      password: vasanth
当我执行时,我得到以下结果

    sudo ansible-playbook userCreate.yml -v
Using /etc/ansible/ansible.cfg as config file

PLAY [all] ************************************************************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************************************************
ok: [10.0.0.47]

TASK [Ansible create user example.] ***********************************************************************************************************************************************************
fatal: [10.0.0.47]: FAILED! => {"changed": false, "cmd": "/usr/sbin/useradd -p VALUE_SPECIFIED_IN_NO_LOG_PARAMETER -m VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "msg": "[Errno 13] Permission denied", "rc": 13}
    to retry, use: --limit @/home/admin/userCreate.retry

PLAY RECAP ************************************************************************************************************************************************************************************
10.0.0.47                  : ok=1    changed=0    unreachable=0    failed=1  

这里的问题是什么?

如果您不是以
root
身份连接到远程主机,那么在使用
变成:
键运行任务时,您需要告诉Ansible变成
root
,该键可以放在播放中,以提升权限运行该播放中的所有任务:

hosts: all
become: true
tasks:
  - name: Ansible create user example.
    user:
      name: vasanth
      password: vasanth
hosts: all
tasks:
  - name: Ansible create user example.
    become: true
    user:
      name: vasanth
      password: vasanth
也可以将其放置在单个任务上,以仅运行具有 提升权限:

hosts: all
become: true
tasks:
  - name: Ansible create user example.
    user:
      name: vasanth
      password: vasanth
hosts: all
tasks:
  - name: Ansible create user example.
    become: true
    user:
      name: vasanth
      password: vasanth
been
键不是专门用于权限提升的;信息技术 可用于要求Ansible作为任何用户运行,并与
成为用户
键。您可以阅读更多信息。

如果您不是以
root
身份连接到远程主机,则在使用
变成:
键运行任务时,您需要告诉Ansible变成
root
,该键可以放在一个播放中,以提升的权限运行该播放中的所有任务:

hosts: all
become: true
tasks:
  - name: Ansible create user example.
    user:
      name: vasanth
      password: vasanth
hosts: all
tasks:
  - name: Ansible create user example.
    become: true
    user:
      name: vasanth
      password: vasanth
也可以将其放置在单个任务上,以仅运行具有 提升权限:

hosts: all
become: true
tasks:
  - name: Ansible create user example.
    user:
      name: vasanth
      password: vasanth
hosts: all
tasks:
  - name: Ansible create user example.
    become: true
    user:
      name: vasanth
      password: vasanth
been
键不是专门用于权限提升的;信息技术 可用于要求Ansible作为任何用户运行,并与
成为用户
键。您可以阅读更多内容。

这里有两个不同的问题:

1.整理您的SSH密钥 Ansible正在尝试使用SSH密钥进行连接,但失败:

"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n"
我建议您首先尝试在服务器中使用ssh:
sshadmin@10.0.0.47

这可能会失败,因为您的公钥不在服务器的
授权密钥中,或者因为
~/.ssh/config
中的密钥映射

一旦您能够在服务器中
ssh
,Ansible也应该能够

2.创建用户 请看ansible输出:

...
"msg": "[Errno 13] Permission denied"
您的用户没有足够的权限创建用户。如果您的
管理员
用户属于
控制盘
组,则可以使用以
root用户身份运行任务:

hosts: all
tasks:
  - name: Ansible create user example.
    become: yes
    user:
      name: vasanth
      # ...

这里有两个不同的问题:

1.整理您的SSH密钥 Ansible正在尝试使用SSH密钥进行连接,但失败:

"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n"
我建议您首先尝试在服务器中使用ssh:
sshadmin@10.0.0.47

这可能会失败,因为您的公钥不在服务器的
授权密钥中,或者因为
~/.ssh/config
中的密钥映射

一旦您能够在服务器中
ssh
,Ansible也应该能够

2.创建用户 请看ansible输出:

...
"msg": "[Errno 13] Permission denied"
您的用户没有足够的权限创建用户。如果您的
管理员
用户属于
控制盘
组,则可以使用以
root用户身份运行任务:

hosts: all
tasks:
  - name: Ansible create user example.
    become: yes
    user:
      name: vasanth
      # ...

我添加了been:true,然后创建成功,但我无法在目标计算机中使用该用户登录。上面说密码不正确。我在网上读过很多地方,他们说我必须从playbook中输入散列密钥作为密码——这是真的吗?如果是,是否有一种方法可以从playbook(针对给定的纯文本密码)以编程方式创建哈希,然后创建用户?@VasanthNagKV需要对密码进行加密,参考。这在模块密码参数的描述中提到,参考。我添加了变为:true,然后创建成功,但我无法在目标计算机中与该用户登录。上面说密码不正确。我在网上读过很多地方,他们说我必须从playbook中输入散列密钥作为密码——这是真的吗?如果是,是否有一种方法可以通过编程从playbook(针对给定的纯文本密码)创建哈希,然后创建用户?@VasanthNagKV需要对密码进行加密,请参阅。这在模块密码参数的描述中提到,请参阅。