Ansible批量添加主机
一、管理端生成RSA公钥
ssh-keygen -t rsa
二、单台添加目标主机
ssh-copy-id root@10.0.0.21 输入密码后免密连接建立
三、批量添加目标主机
1.在/etc/ansible/hosts中编辑要批量添加的主机组
[GROUP-CC] aaa ansible_connection=ssh ansible_user=root ansible_ssh_pass="111111" bbb ansible_connection=ssh ansible_user=root ansible_ssh_pass="222222" ccc ansible_connection=ssh ansible_user=root ansible_ssh_pass="333333" ddd ansible_connection=ssh ansible_user=root ansible_ssh_pass="444444" eee ansible_connection=ssh ansible_user=root ansible_ssh_pass="555555"
2.编辑推送公钥的yaml文件
cat /etc/ansible/roles/ssh_key/ssh-key.yaml,为了保证sshd权限统一,可以统一sshd_config配置并重启sshd,sshd_config提前放置在files目录下。
执行方法 ansible-playbook ssh-key.yaml -e "remote_ip=xx.xx.xx.xx" -k
- hosts: '{{ remote_ip }}' gather_facts: false #不收集远程主机信息 user: root tasks: - name: ssh-copy authorized_key: user: root key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" #本地读取公钥位置 path: '/root/.ssh/authorized_keys' state: present #present添加 absent删除 exclusive: no #是否移除authorized_keys文件中其它非指定key - name: cpsshd copy: src=sshd_config dest=/etc/ssh/sshd_config - name: Restart the sshd service service: name: sshd state: restarted
3.测试并完成推送
ansible-playbook -C /etc/ansible/roles/ssh_key/ssh-key.yaml ansible-playbook /etc/ansible/roles/ssh_key/ssh-key.yaml
四、常见问题处理
1、权限问题
192.168.200.111 | 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 }
出现上面问题的原因一般为用户ssh权限问题,需检查ansible使用的连接用户是否有ssh的权限
root用户时,需要目标机sshd_config开启如下配置
PermitRootLogin yes
StrictModes no
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin\ yes/g' /etc/ssh/sshd_config
sed -i 's/#StrictModes yes/StrictModes\ no/g' /etc/ssh/sshd_config
2、非root用户,需要在/etc/ansible/hosts或者自定义的inventory.ini中指定用户ansible_user=XXX,
[GROUP-CC] aaa ansible_connection=ssh ansible_user=root ansible_ssh_pass="111111" bbb ansible_connection=ssh ansible_user=root ansible_ssh_pass="222222"
自定义该用户公钥并发送
ssh-keygen -t rsa #注意第一步时需要指定路径和钥匙名称 /home/aaa/.ssh/ansibleaaa
ssh-copy-id -i /home/aaa/.ssh/ansibleaaa aaa
指定公钥
ansible aaa -m ping --private-key=/home/aaa/.ssh/ansibleaaa
可以根据需要在管理端的~/.ssh/中添加一个映射用的config文件
cat ~/.ssh/config
#Host hostname #user username Host host1 user user1 Host host2 user user2 #在ssh时,系统会根据Host的映射关系选择连接的用户,只要用ssh连接host2,就会默认用user2用户连接