我是devop的新手,曾尝试玩偶一段时间,现在检查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
}
但是,当我使用如下所示的--ask-pas并提供密码时,它就可以正常工作(自动化时没有用)
sudo ansible testservers -m user -a'name=vasanth state=absent' --become --ask-pas
SSH password:
admin@10.0.0.47 | SUCCESS => {
"changed": false,
"name": "vasanth",
"state": "absent"
}
为解决此问题,我在/ etc / ansible / hosts文件中添加了“ ansible_ssh_pass”,并已已解决。没有--ask-pas
,ping就是成功现在下一步是执行剧本 我创建了如下的剧本
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
这是什么问题?
答案 0 :(得分:2)
如果您不以root
的身份连接到远程主机,则在使用root
键运行任务时,需要告诉Ansible成为become:
,该键可以放置在在剧中以提升的特权运行该剧中的所有任务:
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
become
键并非专门用于特权升级;它
可用于要求Ansible与任何用户一起运行
become_user
键。您可以阅读更多in the docs。
答案 1 :(得分:2)
这里有两个不同的问题:
Ansible尝试使用SSH密钥进行连接,但失败:
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n"
我建议您先尝试在服务器中使用ssh:ssh admin@10.0.0.47
这可能会失败,可能是因为您的公钥不在服务器的authorized_keys
中,或是因为您的~/.ssh/config
中的密钥映射。
一旦您可以在服务器中ssh
, Ansible 也应该可以。
看看ansible输出:
...
"msg": "[Errno 13] Permission denied"
您的用户没有足够的权限来创建用户。如果您的admin
用户属于wheel
组,则可以使用become以root
的身份运行任务:
hosts: all
tasks:
- name: Ansible create user example.
become: yes
user:
name: vasanth
# ...