Rootop 服务器运维与web架构

利用expect实现自动化操作

比如在新上架的服务器,需要初始化一些参数(iptables selinux 内核参数等),一台台修改麻烦,用ssh密钥登陆还得制作密钥并复制。
这里用expect实现自动输入密码并执行脚本。

[root@localhost ~]# cat /etc/issue
CentOS release 6.6 (Final)

[root@localhost ~]# rpm -qa | grep expect #需要expect这个rpm包
expect-5.44.1.15-5.el6_4.x86_64

1、定义主机ip

[root@localhost ~]# cat ip.txt
192.168.0.192
192.168.0.193
192.168.0.194
192.168.0.195
192.168.0.196

2、定义脚本内容

[root@localhost ~]# cat script.sh
mkdir test_directory

不要加任何注释,直接写命令。也不需要#!/bin/bash开头,expect发送过去就是bash执行。

3、shell嵌套expect脚本

[root@localhost ~]# cat shut.sh
#!/bin/bash
#Create By : www.rootop.org
#MailAddress: venus@rootop.org
#Version : 1.0
#Data : 2015/05/22
#Last Modify: 2015/05/22-m1
#Desc : auto ops
#Tested : RedHat6/CentOS6 with "expect" package

passwd='123456'
sc=$(cat script.sh)

cat ip.txt | while read line
do

/usr/bin/expect <<EOF
set timeout 30
spawn ssh root@$line
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
expect "]# "
send "$sc\r"
send "exit\r"
expect eof
EOF

done
exit 0

首先定义密码为passwd变量,把发送的命令定义为sc变量,然后用循环读ip地址定义为line变量。

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/3420.html

作者:Venus

服务器运维与性能优化

评论已关闭。