ansible批量免密,ansible批量


方法1:手动

1.在每台机器上面的~/.ssh目录下执行ssh-keygen -t rsa,然后一路回车。
scp id_rsa.pub 21.8.1.47:/root/.ssh/authorized_keys
2.指定某一台机器A,将其他机器的公钥拷贝至A上面,
使用scp命令: scp id_rsa.pub root@A的ip地址:/root/.ssh/hostXXX,以其他机器的ip地址后三位作文件名hostXXX,
便于区分不同机器的公钥。

3.在A上执行:cat id_rsa.pub.hostXXX >> .ssh/authorized_keys
此步骤是将其他机器的公钥都追加至authorized_keys中。

4.执行cat id_rsa.pub >> .ssh/authorized_keys
此步骤是将A机器自己的公钥也追加至authorized_keys中。

5.使用scp -r authorized_keys root@其他机器的ip地址:/root/.ssh/authorized_keys
将authorized_keys拷贝至其他的每一台机器中。

6.拷贝完毕后A即可免密登陆其他机器,其他机器也可以免密登陆A机器。其他机器相互之间第一次登陆需要输入yes,以后就无需再输。

 

方法2:脚本

https://blog.csdn.net/tantexian/article/details/45887857

 

vim auto_ssh.sh 

#!/usr/bin/expect  

set timeout 10  

set username [lindex $argv 0]  

set password [lindex $argv 1]  

set hostname [lindex $argv 2]  

spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $username@$hostname

expect {

            #first connect, no public key in ~/.ssh/known_hosts

            "Are you sure you want to continue connecting (yes/no)?" {

            send "yes\r"

            expect "password:"

                send "$password\r"

            }

            #already has public key in ~/.ssh/known_hosts

            "password:" {

                send "$password\r"

            }

            "Now try logging into the machine" {

                #it has authorized, do nothing!

            }

        }

expect eof

 

chmod 777 auto_ssh.sh

然后执行下述命令即可。

./auto_ssh.sh root 123456 192.168.10.162

 

 

 

 

方法3:ansible:

https://blog.csdn.net/lcl_xiaowugui/article/details/81874015

 

Ansible免密登录

主要是ansible服务端需要将/root/.ssh/id_rsa.pub分发到其他服务器

有两个命令比较重要

ssh-keygen :这个命令是用来生成本机的公钥和私钥的
ssh-keyscan : 这条命令是用来把远程服务器的公钥来获取到本地的
  • 1
  • 2

(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
  • 1
  • 2
  • 直接设置环境变量
命令为:
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

相关内容

    暂无相关文章