Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #服务器登陆脚本
- #By:Tacey Wong
- # 服务器用户名
- ARR_SERVER_USER=(
- [0]='user-name'
- )
- # 服务器IP地址
- ARR_SERVER_HOST=(
- [0]='0.0.0.0'
- )
- # 服务器SSH端口号
- ARR_SERVER_PORT=(
- [0]='22'
- )
- # 服务器SSH密码,密钥登陆的值设置为 NULL
- ARR_SERVER_PASSWORD=(
- [0]='password'
- )
- # 服务器说明
- ARR_SERVER_COMMENT=(
- [0]='server description'
- )
- # 密钥文件地址. 如果是密钥登陆的话, 值为密钥文件地址. 否则为 NULL
- ARR_SERVER_KEY=(
- [0]=NULL
- )
- # 统计服务器台数,方便遍历输出
- LEN=${#ARR_SERVER_USER[@]}
- # 屏幕输出提示信息。显示服务器序号、主机地址、说明信息
- screen_echo() {
- printf "💕服务器登录管理💕\n"
- printf "%-7s |" '序号'
- printf "%-18s |" '主机'
- printf "%-30s\n" '说明'
- for((i=0; i<$LEN; i++))
- do
- printf "\e[31m %-5s\e[0m|" "$i" # 颜色为红色
- printf "%-15s |" "${ARR_SERVER_HOST[$i]}"
- printf "%-30s\n" "${ARR_SERVER_COMMENT[$i]}"
- done
- }
- # 调用函数,让信息显示出来
- screen_echo
- while true
- do
- # 让使用者选择所需要登陆服务器的所属序号
- read -p '请输入要登陆的服务器所属序号: ' SERVER_NUM
- # 如果输入为空格或者回车,显示错误信息,后续代码不再执行,重新循环。
- if [ ! ${SERVER_NUM} ]
- then
- echo '请输入序号'
- continue
- fi
- # 如果输入的不是数字,显示错误信息,后续代码不再执行,重新循环。
- if [[ "${SERVER_NUM}" =~ [^0-9]+ ]]
- then
- echo '序号是数字'
- continue
- fi
- # 如果输入的以 0 开头的数字、大于等于服务器台数、小于 0,显示错误信息,后续代码不再执行,重新循环。
- if [[ "${SERVER_NUM}" =~ ^0[0-9]+ ]] || [ ${SERVER_NUM} -ge ${LEN} ] || [ ${SERVER_NUM} -lt 0 ]
- then
- echo '请输入存在的序号'
- continue
- fi
- # 跳出循环
- break
- done
- # 登陆的函数
- # set timeout 设置超时时间。-1 永不超时
- # spawn : -noecho 意思为终端中不显示 spawn .. ssh ... 等信息,不加此参数会有输出; -o StrictHostKeyChecking=no 不提示认证
- # $1、$2、$3、$4 代表调用函数是所传输的第一个、第二个、第三个、第四个参数值
- # *yes/no* 意思为 ssh 后如果返回的信息当中包含 yes/no,而 *password* 就是代表 ssh 后如果返回的信息当中包含 password
- # send 意思为发送信息
- # exp_continue 意思为继续执行下面的匹配
- # interact 意思为留在远程终端上面。如果不写此语句,自动退出服务器
- auto_login_ssh () {
- if [ NULL = $5 ]
- then
- expect -c "
- set timeout 10;
- spawn -noecho ssh -o StrictHostKeyChecking=no $1@$2 -p $3;
- expect {
- *yes/no* {
- send yes\r
- exp_continue
- }
- *password* {
- send $4\r
- }
- }
- interact
- ";
- else
- expect -c "
- set timeout 10;
- spawn -noecho ssh -o StrictHostKeyChecking=no -i $5 $1@$2;
- interact
- ";
- fi;
- return 0;
- }
- # 调用登陆函数并传值。用户名、地址、端口号、密码
- auto_login_ssh ${ARR_SERVER_USER[$SERVER_NUM]} ${ARR_SERVER_HOST[$SERVER_NUM]} ${ARR_SERVER_PORT[$SERVER_NUM]} ${ARR_SERVER_PASSWORD[$SERVER_NUM]} ${ARR_SERVER_KEY[$SERVER_NUM]}
Add Comment
Please, Sign In to add comment