1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > linux脚本expect自动登录 SHELL脚本:利用expect完成SSH自动登录

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

时间:2021-12-08 13:32:11

相关推荐

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

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

1、脚本实现的功能

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

2、脚本使用前提条件

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

格式:IP地址 Root密码

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

3、脚本使用说明

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

4、脚本内容

#!/bin/bash

Log=/tmp/install_agent.log

PW_File=/tmp/password.txt

whilereadline

do

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

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

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

settimeout5

spawnsshroot${host}

expect{

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

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

}

expect{

"Permisstion*"{send_user"\n${host}ispassworderror\n"}

}

settimeout2

expect{

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

}

expect{

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

}

expecteof

EOF

done

Exist_Agent=`grep-E"^easyops-isexist|^spawn"${Log}|grep-B1"^easyopsisexist"|grep-o"[0-9.]\{2,\}"`

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

echo${Exist_Agent}easyopsisexist

echo${Success_Agent}agentinstallsuccess

foripin`gawk'{print$1}'${PW_File}`

do

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

if[$?-ne0];then

echo${ip}isinstallfailed

fi

done

5、脚本Tips

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。