linux脚本expect自动登录,SHELL脚本:利用expect完成SSH自动登录

本文介绍了一个批量自动化安装服务器Agent的脚本,通过SSH登录并执行安装命令,适用于大量服务器的情况。脚本使用expect工具实现交互命令的自动化,并提供超时设置和错误处理。同时,脚本分析日志以确定安装状态,帮助识别失败的服务器。
摘要由CSDN通过智能技术生成

有个业务需求,需要在服务器上安装一个Agent,安装Agent其实很简单,但是顶不住服务器数量太多,所以不可能一台台的登上去安装,所以写了个脚本可以实现批量自动化安装

1、脚本实现的功能

根据提供的IP地址和Root密码,自动完成SSH登录后,执行安装命令,完成Agent的安装

2、脚本使用前提条件

①密码文件:将IP地址和Root密码单独写到一个文件中,默认为root用户登录,所以只需要两列既可,如下所示:

格式:IP地址 Root密码

83e5940495e1c9a8de7264cad66db9b9.png

②expect安装:有些服务器可能没有安装这个工具,可以通过yum源进行安装,执行/usr/bin/expect这个命令成功既可。

3、脚本使用说明

脚本直接执行既可,登录成功后需要运行的命令以及结尾部分对日志的分析,可以根据自己的实际需求进行更改,此脚本最重要的内容就是expect这个工具,可以将本是交互的命令写到一个过程中实现自动执行。脚本比较简单,其实就是实现一个ssh的自动化登录功能。

4、脚本内容

#!/bin/bash

Log=/tmp/install_agent.log

PW_File=/tmp/password.txt

while read line

do

host=`echo $line|gawk '{print $1}'`

password=`echo $line|gawk '{print $2}'`

/usr/bin/expect >> ${Log} 2>&1 <

set timeout 5

spawn ssh root${host}

expect {

"*yes/no" { send "yes\r"; exp_continue }

"*assword:" { send "${password}\r" }

}

expect {

"Permisstion*" { send_user "\n${host} is password error\n" }

}

set timeout 2

expect {

"*#" { send "需要执行的命令,如pwd\r";set timeout 120(如果命令需要执行较长时间可设置) }

}

expect {

"*#" { send "exit\r" }

}

expect eof

EOF

done 

Exist_Agent=`grep -E "^easyops -is exist|^spawn" ${Log} |grep -B 1 "^easyops is exist"|grep -o "[0-9.]\{2,\}"`

Success_Agent=`grep -E "\bstart success\b|^spawn" ${Log}|grep -B 1 "\bstart success\b" |grep -o "[0-9.]\{2,\}"`

echo ${Exist_Agent} easyops is exist

echo ${Success_Agent} agent install success

for ip in `gawk '{print $1}' ${PW_File}`

do

echo ${Exist_Agent} ${Success_Agent} |grep -w "${ip}" > /dev/null 2>&1

if [ $? -ne 0 ];then

echo ${ip} is install failed

fi

done

5、脚本Tips

set timeout:设定超时时间,如果超过这个时间,expect就不会再期待定义的字符串

spawn:启动一个子进程来执行命令,如ssh

expect:期待出现的字符串,可以使用通配符,如“*password:”,这里每个expect我都用{}进行组合,因为网上的教程都是直接用expect+send,但是我试了好几次一直无法成功匹配,不知道是哪里配置有问题,最后用这种方法解决。

send:当出现了expect定义的字符串后,发送定义的内容,如执行的命令“pwd\r”,\r表示发送了命令后敲的回车键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值