Ansible免密登录

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登录主机都不需要密码
这里写图片描述

原文地址:https://www.cnblogs.com/wanglfhh/p/12447360.html