自动登录测试环境脚本-V2版
自动登录测试环境脚本
由于我们可能需要登录多套测试环境,每套测试环境都可能有多个机器,所以最好是能有一个自动登录的脚本可以自由的切换到不同的环境的不同机器上。
1. 文件结构
ericte@pl22b16v1-0:/mnt/sharedDrive/ericte/autoLogin$ ls -l
total 12
-r-xr-xr-x 1 ericte rnd 2623 Dec 2 09:28 autoLogin.sh
-r-xr-xr-x 1 ericte rnd 409 Dec 2 08:36 login.exp
drwxrwxr-x 2 ericte rnd 4096 Dec 2 10:15 servers
ericte@pl22b16v1-0:/mnt/sharedDrive/ericte/autoLogin$ ls -l servers/
total 12
-rw-rw-r-- 1 ericte rnd 185 Dec 2 08:45 CI-POD01
-rw-rw-r-- 1 ericte rnd 247 Dec 2 08:36 HYB5
-rw-rw-r-- 1 ericte rnd 199 Dec 2 10:15 HYB2
2. 测试环境文件
ericte@pl22b16v1-0:/mnt/sharedDrive/ericte/autoLogin$ cat servers/CI-POD01
MN 137.58.243.68
DDC1 137.58.243.71
DDC2 137.58.243.72
3. autoLogin.sh
#!/usr/bin/env bash
#===============================================================================
#
# FILE: autoLogin.sh
#
# USAGE: ./autoLogin.sh
#
# DESCRIPTION: auto login test environment
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: 哼!无知是恶
# ORGANIZATION: 博客园
# CREATED: 12/02/20 04:36:58
# REVISION: v1
#===============================================================================
set -o nounset # Treat unset variables as an error
date=$(date +'[%F %T]')
color_end='\e[0m'
color_red='\e[1;31m'
color_green='\e[1;32m'
color_yellow='\e[1;33m'
color_skyblue='\e[1;36m'
CWD="$HOME/autoLogin"
autoScript="$CWD/login.exp"
cd ${CWD}
function initTestChannel() {
server=$1
numberOfNode=$(cat $server | wc -l)
for((i=1; i<$(($numberOfNode+1));i++))
do
name=$(sed -n "${i}p" $server | awk '{print $1}')
ip=$(sed -n "${i}p" $server | awk '{print $2}')
acc=$(sed -n "${i}p" $server | awk '{print $3}')
pwd=$(sed -n "${i}p" $server | awk '{print $4}')
array_index=$(($i-1))
hostname[$array_index]=$name
ipaddr[$array_index]=$ip
account[$array_index]=$acc
passwd[$array_index]=$pwd
done
}
function initFile() {
numberOfFile=$(ls -l servers/* | wc -l)
for((j=1;j<$(($numberOfFile+1));j++))
do
file=$(ls -l servers/* | sed -n "${j}p" | awk '{print $9}')
file_index=$(($j-1))
file_array[$file_index]=$file
done
}
function promotionFileMessage()
{
length=${#file_array[@]}
for((i=0;i<$length;i++))
do
fileName=$(echo ${file_array[$i]} | awk -F '/' '{print $2}')
echo -e "$color_red$i: $fileName$color_end"
done
}
function promotionEnvMessage() {
length=${#hostname[@]}
for((k=0;k<$length;k++))
do
echo -e "$color_red$k: ${hostname[$k]} ${ipaddr[$k]}$color_end"
done
}
initFile
echo -e "Do you want to login?"
promotionFileMessage
read -t 15 -p "Plese input your selection(number): " testchannel
initTestChannel ${file_array[$testchannel]}
name=$(echo ${file_array[$testchannel]} | awk -F '/' '{print $2}')
echo -e "welcome to test channel $color_red${name}$color_end"
promotionEnvMessage
read -t 15 -p "please input your selection(number): " serverOption
case "$serverOption" in
[0-9]|1[0-9]|2[0-9])
echo -e "$date: Welcome to host ${color_red}${hostname[$serverOption]}${color_end}"
$autoScript ${ipaddr[$serverOption]} ${account[$serverOption]} ${passwd[$serverOption]}
;;
*)
echo -e "\n${color_red}Error:${color_end} Input timeout or your input is invalid, exited\n"
exit 1
;;
esac
4. expect脚本
#!/usr/bin/expect -f
# set Variables
set ipaddr [lrange $argv 0 0]
set account [lrange $argv 1 1]
set password [lrange $argv 2 2]
set timeout 2
spawn ssh -q $account@$ipaddr
#match_max 100000
# Look for passwod prompt
expect {
"Are you sure you want to continue connecting (yes/no)?" {
send "yes\r"
exp_continue
}
"*?assword:*" {
send "$password\r"
exp_continue
}
eof
{
send_user "eof\n"
}
}
interact