Ansible实践篇(一):Ansible免密登录
主要是ansible服务端需要将/root/.ssh/id_rsa.pub分发到其他服务器
有两个命令比较重要
ssh-keygen :这个命令是用来生成本机的公钥和私钥的
ssh-keyscan : 这条命令是用来把远程服务器的公钥来获取到本地的
(1)首先关闭公钥认证
如果说不想关闭公钥认证的话,可以用ssh-keycan
命令将公钥添加到本地的known_hosts文件里面去
具体命令是ssh-keyscan IP1 (IP2 ...) >> /root/.ssh/known_hosts
可以添加多个
Ansible1.2.1及其之后的版本都会默认启用公钥认证.
公钥认证就是如果之后的某一台客户端和之前登录过的某一台主机IP相同,那么在“known_hosts”中有了不同的key,这时会提示一个错误信息直到被纠正为止。
在使用Ansible时,可能不想遇到那样的情况,如果有个主机没有在“known_hosts”中被初始化将会导致在交互使用Ansible或定时执行Ansible时对key信息的确认提示。如果想要禁用这个行为的话,可以关闭公钥认证,而且公钥认证会比较慢,也是提高效率的一个方法
关闭公钥认证的方法有两种:
- 编辑ansible.cfg配置文件
[defaults]
host_key_checking = False
- 直接设置环境变量
命令为:
export ANSIBLE_HOST_KEY_CHECKING=False
(2)使用ssh-key产生公钥和私钥
[root@localhost ansible]# ssh-keygen -t rsa -b 2048 -P ” -f /root/.ssh/id_rsa
(3)添加主机信息到hosts文件中
[root@localhost ansible]# pwd
/etc/ansible
[root@localhost ansible]# vim hosts
[db]
172.25.70.1 ansible_ssh_user="root" ansible_ssh_pass="redhat"
172.25.70.2 ansible_ssh_user="root" ansible_ssh_pass="redhat"
##如果用户名和密码都相同的话也可以不用添加,在执行第5步的时候加上-u和-k就可以了
(4)编写Playbook剧本文件
##是基于YAML语言编写的
[root@localhost ansible]# vim ssh.yml
# ssh-addkey.yml
---
- hosts: all
gather_facts: no
tasks:
- name: install ssh key
authorized_key: user=root
key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
state=present
(5)运行playbook文件
[root@localhost ansible]# ansible-playbook -i hosts ssh.yml
(6)测试
此时运用模块或者直接ssh登录主机都不需要密码