linux脚本expect自动登录,SHELL脚本:利用expect完成SSH自动登录
有個業(yè)務(wù)需求,需要在服務(wù)器上安裝一個Agent,安裝Agent其實很簡單,但是頂不住服務(wù)器數(shù)量太多,所以不可能一臺臺的登上去安裝,所以寫了個腳本可以實現(xiàn)批量自動化安裝
1、腳本實現(xiàn)的功能
根據(jù)提供的IP地址和Root密碼,自動完成SSH登錄后,執(zhí)行安裝命令,完成Agent的安裝
2、腳本使用前提條件
①密碼文件:將IP地址和Root密碼單獨寫到一個文件中,默認為root用戶登錄,所以只需要兩列既可,如下所示:
格式:IP地址 Root密碼
②expect安裝:有些服務(wù)器可能沒有安裝這個工具,可以通過yum源進行安裝,執(zhí)行/usr/bin/expect這個命令成功既可。
3、腳本使用說明
腳本直接執(zhí)行既可,登錄成功后需要運行的命令以及結(jié)尾部分對日志的分析,可以根據(jù)自己的實際需求進行更改,此腳本最重要的內(nèi)容就是expect這個工具,可以將本是交互的命令寫到一個過程中實現(xiàn)自動執(zhí)行。腳本比較簡單,其實就是實現(xiàn)一個ssh的自動化登錄功能。
4、腳本內(nèi)容
#!/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?"需要執(zhí)行的命令,如pwd\r";set?timeout?120(如果命令需要執(zhí)行較長時間可設(shè)置)?}
}
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:設(shè)定超時時間,如果超過這個時間,expect就不會再期待定義的字符串
spawn:啟動一個子進程來執(zhí)行命令,如ssh
expect:期待出現(xiàn)的字符串,可以使用通配符,如“*password:”,這里每個expect我都用{}進行組合,因為網(wǎng)上的教程都是直接用expect+send,但是我試了好幾次一直無法成功匹配,不知道是哪里配置有問題,最后用這種方法解決。
send:當出現(xiàn)了expect定義的字符串后,發(fā)送定義的內(nèi)容,如執(zhí)行的命令“pwd\r”,\r表示發(fā)送了命令后敲的回車鍵
總結(jié)
以上是生活随笔為你收集整理的linux脚本expect自动登录,SHELL脚本:利用expect完成SSH自动登录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雨什么好听的名字大全
- 下一篇: Linux软件包增量升级,Linux增量