比如在新上架的服务器,需要初始化一些参数(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