码迷,mamicode.com
首页 > 其他好文 > 详细

ssh批量互信

时间:2015-10-12 01:58:16      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:ansible ssh 互信

前言

    在部署ansible过程中,刚开始我把被控制端的密码明文的写在了/etc/ansible/hosts中考虑到安全问题,因为ansible不需要安装客户端和服务端,原因是基于ssh连接。正因此可以创建ssh互信控制端和被控制端。


一、文件iplist


该文件是记录被控制端的ip 要和/etc/ansible/hosts

定义的ip一致。否则会有的机器不会连通。

实验过程中:

cat iplist

192.168.2.180

192.168.2.235

192.168.2.141

192.168.1.130

192.168.1.131

192.168.1.132

192.168.1.133

192.168.1.134

有这么几个服务器。。

cat /etc/ansible/hosts

[webhosts]

192.168.2.235 ansible_ssh_user=root 

#ansible_ssh_pass=nbs2010

192.168.2.180 ansible_ssh_user=root 

#ansible_ssh_pass=nbs2010

192.168.2.141 ansible_ssh_user=root 

#ansible_ssh_pass=nbs2010

192.168.1.130 ansible_ssh_user=root

192.168.1.131 ansible_ssh_user=root

192.168.1.132 ansible_ssh_user=root

192.168.1.133 ansible_ssh_user=root

192.168.1.134 ansible_ssh_user=root


二、文件test.exp


该文件是用来和第三个文件相互给iplist中的创建互信。因为在创建过程中要产生互动输入密码通过expect语言来完成。

在使用expect之前需要安装

yum install tcl

yum install tk

yum install expect

test.exp

#!/usr/bin/expect  -f
set host [lindex $argv 0]

定义一个参数和变量host

set password "nbs2010"

定义互动时输入的密码

spawn ssh-copy-id -i /root/.ssh/id_rsa.pub " root@$host"

此处是ssh建立互信时的登陆口令$host会是在test.sh 里作为参数传进来。

expect {
        "yes/no"        {send "yes\r";exp_continue}
        "*password*"    {send "$password\r"}
}
expect eof  //此处是当建立完互信后立刻退出被控制端


三、test.sh


该文件是结合iplist和test.exp来建立互信

#!/bin/bash
ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ‘‘

//创建互信时,创建认证文件。可以man ssh-keygen 各个参数的含义。

n=0
for ip in `cat iplist`
do
#逐行取出每个ip的数值
n=$(($n+1))
expect test.exp $ip > /dev/null 2>&1
done

//此处是shell脚本的核心。通过for循环来逐行读取ip列表。作为一个参数传到test.exp的$argv 0

把执行结果都输出到/dev/null 文件中去。。


演示过程如下:


直接执行./test.sh

[root@server ~]# ./test.sh 

Generating public/private rsa key pair.

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

3d:b1:d5:51:12:be:f1:43:91:08:18:1b:5a:93:10:20 root@server

The key‘s randomart image is:

+--[ RSA 2048]----+

|   E ..oo=+.. =+o|

|    .   oo+  + +.|

|       . .. . +. |

|         . +  .+ |

|        S +   ...|

|           .    .|

|                 |

|                 |

|                 |

+-----------------+

此时在/root/.ssh/下出现:

[root@server ~]# ll .ssh/

总用量 12

-rw-------. 1 root root 1671 10月 11 23:03 id_rsa

-rw-r--r--. 1 root root  393 10月 11 23:03 id_rsa.pub

-rw-r--r--. 1 root root 3160 10月 11 23:03 known_hosts

说明现在互信已经建立。

可以通过ansible webhost -m ping 会出现:

[root@server ~]# ansible webhosts -m ping

192.168.2.141 | success >> {

    "changed": false, 

    "ping": "pong"

}


192.168.1.130 | success >> {

    "changed": false, 

    "ping": "pong"

}


192.168.1.131 | success >> {

    "changed": false, 

    "ping": "pong"

}


192.168.2.235 | success >> {

    "changed": false, 

    "ping": "pong"

}


192.168.2.180 | success >> {

    "changed": false, 

    "ping": "pong"

}


192.168.1.133 | success >> {

    "changed": false, 

    "ping": "pong"

}


192.168.1.132 | success >> {

    "changed": false, 

    "ping": "pong"

}


192.168.1.134 | success >> {

    "changed": false, 

    "ping": "pong"

}

此时说明这八个ip的被控制端和控制端互信已经建立。。

接下来你可以批量的使用ansible的强大的功能了。。不需要在/etc/ansible/hosts中写密码。。。

本文出自 “黎明前的黑暗” 博客,谢绝转载!

ssh批量互信

标签:ansible ssh 互信

原文地址:http://9907516.blog.51cto.com/9897516/1701969

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!