使用Shell脚本+expect批量部署ssh

Shell脚本+expect批量部署ssh
一、准备工作及思路
1,三台机器做实验(centos6.5、IP:192.168.0.22 (主控制)、192.168.0.156、192.168.0.157)
2,IP:22这一台做主控机器,另外2台做客户机。
3,提前在主控制机器上创建好公钥,安装好expect,使用脚本批量推送ssh公钥。
4,本次部署是以root身份进行下面的操作。
二、正式部署
1,首先穿件秘钥
[[email protected] .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
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:
a3:08:ab:02:bf:7b:12:7d:d9:8f:9c:a9:67:38:53:a1 [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
.
.. +S.
. .o..E.o.
.......+ =
..o . + B .
o o= .*
+-----------------+
2,在根目录下创建一个scripts来存放脚本文件和 ip.txt文件
[[email protected] /]# mkdir scripts
[[email protected] /]# cd scripts/
[[email protected] scripts]# touch ip.txt
3,接着在scripts目录下编辑脚本文件及ip.txt内容:
[[email protected] scripts]# cat fenfa.sh
#!/bin/bash
#date:2018-04-11
#author tony
#批量ssh认证建立
for p in $(cat /scripts/ip.txt)
do
ip=$(echo "$p"|cut -f1 -d":")
password=$(echo "$p"|cut -f2 -d":")

expect -c "
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]$ip
        expect {
                \"*yes/no*\" {send \"yes\r\"; exp_continue}
                \"*password*\" {send \"$password\r\"; exp_continue}
                \"*Password*\" {send \"$password\r\";}
        }
"
done    

for h in $(cat /scripts/ip.txt|cut -f1 -d":")
do
ssh [email protected]$h ‘ ifconfig ‘
#如果命令是多行的,请参照下面
#ssh [email protected]$h ‘此处写要执行的命令1‘
#ssh [email protected]$h ‘此处写要执行的命令2‘
#ssh [email protected]$h ‘此处写要执行的命令3‘
done
[[email protected] scripts]# cat ip.txt 

192.168.0.156:hwg123
192.168.0.157:hwg123
4,最后执行脚本即可
[[email protected] scripts]# sh fenfa.sh
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
Now try logging into the machine, with "ssh ‘[email protected]‘", and check in:

.ssh/authorized_keys

to make sure we haven‘t added extra keys that you weren‘t expecting.

spawn ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
Now try logging into the machine, with "ssh ‘[email protected]‘", and check in:

.ssh/authorized_keys

to make sure we haven‘t added extra keys that you weren‘t expecting.

eth0 Link encap:Ethernet HWaddr 00:50:56:21:DA:F4
inet addr:192.168.0.156 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe21:daf4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:58225 errors:0 dropped:0 overruns:0 frame:0
TX packets:351 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3662557 (3.4 MiB) TX bytes:45504 (44.4 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

eth0 Link encap:Ethernet HWaddr 00:50:56:35:D4:31
inet addr:192.168.0.157 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe35:d431/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:228313 errors:0 dropped:0 overruns:0 frame:0
TX packets:6336 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:22630600 (21.5 MiB) TX bytes:443245 (432.8 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1292 (1.2 KiB) TX bytes:1292 (1.2 KiB)

当然这个比较low,以后有时间再改进一下。

原文地址:http://blog.51cto.com/hwg1227/2096907

时间: 2024-10-19 14:58:04

使用Shell脚本+expect批量部署ssh的相关文章

shell脚本批量部署ssh

日常运维工作中,需要给几十上百台服务器批量部署软件或者是重启服务器等操作, 这样大量重复性的工作一定很苦恼,本文给大家提供了最基本的批量操作的方法,虽然效率不高,对于初学者来说还是好理解.由于刚开始学习写脚本,什么 puppt这样的高级工具还不会使用,就简单的利用shell脚本.ssh-keygen.expect来实现.希望能给各位带来帮助,不足之处还请留言 指出,大家共同进步. 首先,需要检查expect是否安装:rpm -qa|grep expect 然后,在操作机上创建公钥:ssh-key

shell 脚本实战笔记(8)--ssh免密码输入执行命令

前言: ssh命令, 没有指定密码的参数. 以至于在脚本中使用ssh命令的时候, 必须手动输入密码, 才能继续执行. 这样使得脚本的自动化执行变得很差, 尤其当ssh对应的机器数很多的时候, 会令人抓狂.本文讲解了两种方式, 一种借助expect脚本, 一种借助sshpass来实现. *) 借助expect脚本来实现1. expect不是系统自带的工具, 需要安装yum install expect -y 2. expect脚本的编写规则 1. [#!/usr/bin/expect] 告知系统脚

shell脚本:批量修改文件名(删除文件名中字符)

shell脚本:批量修改文件名(文件名中添加字符) 上一篇写过批量修改文件名(文件名中添加字符),工作中还存在这样的需求,批量修改文件名,删除文件名中的某些字符: 举例如下:批量改名,删除文件名中多余字符 目录下文件名为如下,要求去掉_finished. stu_102999_1_finished.jpg stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg stu_102999_5_finis

shell脚本执行冲突事件-ssh&while

今天发现一个问题: 先看下脚本内容: [email protected]/0 # cat !$ cat /tmp/test_nginx ls *.txt | tr ' ' '\n' | while read line do  echo $line if [ 'yes' == 'yes' ] then ssh  192.168.109.10 "echo 'yes'" else ssh 192.168.109.10 "echo 'no'" fi done 上面脚本很简单

(转)通过shell脚本实现批量添加用户和设置随机密码以及生产环境如何批量添加

通过shell脚本实现批量添加用户和设置随机密码以及生产环境如何批量添加 原文:http://www.21yunwei.com/archives/4773 有一个朋友问我如何批量创建用户和设置密码 ,我就简单给他写了两个脚本,让他自己参考下并自己根据实际情况进行修改,毕竟他需要的用户名和密码都是实际生产环境的. 这里分两种情况,一种是测试for循环批量添加用户,一个是根据实际生产环境进行批量添加.分别写一下案例如下:1,for添加指定类型用户以及设置随机密码.脚本作用:批量添加user1-10用

Shell脚本------Expect(实现ssh服务免交互)

Expect基本概述 Expect是通用的,因此它可以作为用户级别的命令运行,而无需考虑任何程序和任务.Expect实际上可以同时与多个程序对话.Expect对于需要程序与用户交互的程序来说非常有用.如果有需要Expect还可以交还控制权给用户,而不需要停止被控制的程序.同样,用户也可以在任何时候将控制权返还给脚本. 常用选项 -c:在脚本中任何要执行的命令之前的命令前缀.应该用引号将命令包围起来,防止被shell破坏.此选项可以多次使用.多个命令可以用一个-c按顺序执行,用分号进行分隔(如果使

批量部署ssh信任关系

要求1:大批量部署SSH信任关系,在A文件分发服务器上大批量部署WEB层面信任关系文件分发服务器为:10.0.3.9 登录用户为:zhangsan WEB层IP段:10.0.3.10~10.0.3.60 (1).请大批量在WEB层上建立zhangsan用户,并且在zhangsan家目下面创建一个.ssh目录(2).在3.9服务器上面,zhangsan用户是用ssh-genkey创建私钥匙和公钥,将公钥导出到authorized_keys这个文件,权限更改为600(3).将authorized_k

使用shell脚本实现自动化部署hadoop集群

有四台Linux服务器,其中一台为主,其它为从.服务器使用的是CentOS6.5,jdk选择1.6,hadoop选择1.0.4版本.要到实际环境中应用还要根据实际情况做修改. 如果是新装好的系统,要先配置好ip,shell脚本如下: #!bin/bash read "input ip:" ip echo 'the default hostname is master' sed -i '$aIPADDR='$ip /etc/sysconfig/network-scripts/ifcfg-

批量部署ssh私钥认证

vim  batch_sshkey.sh #!/bin/bashcd /rootcat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keysfor i in `cat iplist`doip=$(echo "$i"|cut -f1 -d":")password=$(echo "$i"|cut -f2 -d":")expect -c "spawn scp /root