- 论坛徽章:
- 0
|
主脚本
#!/bin/bash
#
#
#
#E'mail:yibin.shen@infowarelab.com
#
#global variable
DATA="/home/debian/shell/login/ssh_host.dat"
SSHSCRIPT="/home/debian/shell/login/ssh_login.sh"
if [ ! -f "$DATA" ] ; then
echo "DATA file doesn't exsit"
exit 1
fi
if [ ! -x "$SSHSCRIPT" ] ; then
echo "you need a expect script"
exit 1
fi
#print menu 1
MainMenu()
{
clear
echo "-------------------------------------"
echo "+ 1:hz-idc +"
echo "+ 2:gsb +"
echo "+ 3:beta +"
echo "+ 4:hzxs +"
echo "+ 5:jsbc +"
echo "-------------------------------------"
echo -e "\n\n\n"
echo "-plz input your choice(1|2|3|4|5|)"
echo "enter q to quit this menu"
read IDC_NUM
}
#print menu 2
DisplayHosts()
{
awk '
BEGIN{FS = "\n"; RS = "" }'\
"\$1 ~ /$1/ {print \$0}" ${DATA} | \
awk '{print $1 "\t" $2}'
MAX=$(awk '\
BEGIN{FS = "\n"; RS = "" }'\
"\$1 ~ /$1/ {print \$0}" ${DATA} | \
awk '{print $1 "\t" $2}' | tail -1 | awk '{print $1}')
echo -e "plz enter your choice \n"
echo -e "enter b to go to previous menu\n"
echo -e "enter q to quit"
read CHOICE
case ${CHOICE} in
[0-9]*)
if [ ${CHOICE} -ge 1 ] && [ ${CHOICE} -le ${MAX} ]
then
LoginInit $1 ${CHOICE}
else
echo "error choice"
DisplayHosts $1
fi
;;
b)
MainMenu
;;
q)
exit 1
;;
*)
DisplayHosts $1
;;
esac
}
#login
LoginInit()
{
#get the host ip,user,pwd,and port
#$1 is the IDC value
RECORD=$(awk '
BEGIN{FS = "\n"; RS = "" }'\
"\$1 ~ /$1/ {print \$0}" ${DATA} | \
awk '$1 ~ '"/^$2/"'{print $0}')
USER=`echo $RECORD | awk '{print $4}'`
HOST=`echo $RECORD | awk '{print $2}'`
PASSWD=`echo $RECORD | awk '{print $5}'`
PORT=`echo $RECORD | awk '{print $4}'`
${SSHSCRIPT} ${USER} ${HOST} ${PASSWD}
}
#display menu
MainMenu
case ${IDC_NUM} in
1)
DisplayHosts hz
;;
2)
DisplayHosts gsb
;;
3)
DisplayHosts beta
;;
4)
DisplayHosts xs
;;
5)
DisplayHosts jsbc
;;
q)
exit 1
;;
*)
echo "please input (1|2|3|4|5)"
MainMenu
;;
esac
#script finished
|
用来保存登录信息的的文件格式,从第二字段起依次为IP,端口,用户,密码
hz-IDC
1 192.168.0.80 22 root 123456
2 192.168.0.81 22 root 123456
3 192.168.0.72 22 root 123456
4 192.168.0.46 22 root asdfasdf
5 192.168.0.7 22 root asdf
gsb
1 10.10.30.9 22 root xxx
2 10.10.30.35 22 root xxx2
3 10.10.30.34 22 root xd
4 10.10.30.36 22 root sss
5 10.10.30.37 22 root sss
6 10.10.30.38 22 root asdf
7 10.10.30.43 22 root asdf
|
3 ssh用到的expect脚本spawn ssh -l $USER $HOST
set timeout 60
while {1} {
expect -re "Are you sure you want to continue connecting (yes/no)?" {
# First connect, no public key in ~/.ssh/known_hosts
send "yes\r"
} -re "assword:" {
# Already has public key in ~/.ssh/known_hosts
send "$PASSWD\r"
} -re " ermission denied, please try again." {
# Password not correct
exit
} -re "Connection refused" {
exit
} timeout {
exit
} "#" {
interact
} "losed" {
exit
}
}
|
主要思路很简单,将data文件中的ip信息显示出来,根据用户的选择,
生成user,root,passwd等信息,再调用expect脚本来自动登录,
脚本写的比较烂,欢迎大家批评指正, |
|