Shell-自动登录脚本

大体思路

  • 将服务器连接相关信息提取到配置文件,包括IP , 用户名 , KEY 位置或者连接密码
  • 从配置文件读取相关信息,用户选择进行连接
  • 用户交互处使用Expect

Main

配置文件

配置文件最终转化成了数组,相关信息与代码强耦合。需要的可以根据自己喜好修改配置文件格式和代码。

/Users/wangjia/bin/ssh/conf/server.conf

id  desc            username   outsite-ip      insite-ip        connect-type    key-path/password
1)  aoserver1       ec2-user   52.74.211.11    172.31.21.11     key             /Users/wangjia/note/online/apptest.pem
2)  aoserver2       ec2-user   52.74.211.12    172.31.21.12     password             mypassword

connect-type (key/password/-) 密钥/密码/已添加公钥

主程序代码

common_ssh.sh

#!/bin/bash
# author  : wangjia
# time    : 2016/12/26 18:31
# contact : [email protected]
# desc    : final ssh
# server_info_array : id  desc  username  outsite-ip  insite-ip    connect-type(key/password/-)  key-path/password

#conf_file_path="/Users/wangjia/bin/test/server.conf"

#账号密码登录 expect 脚本调用
# @param1  用户登录名@IP eg.. [email protected]
# @param2  password
function pw_login(){
    /Users/wangjia/bin/ssh/expect_login.sh  $1 $2
}

#进行连接
# @param1 配置文件的行
function connect_by_line(){
    choose_server=$1;
    #按空格分割成数组
    server_info_arr=(${choose_server// / })
    if [ "${server_info_arr[5]}" == "key" ]
    then
        ssh -i "${server_info_arr[6]}" "${server_info_arr[2]}@${server_info_arr[3]}";
    elif [ "${server_info_arr[5]}" = "password" ]
    then
        pw_login "${server_info_arr[2]}@${server_info_arr[3]}" "${server_info_arr[6]}";
    else
        ssh "${server_info_arr[2]}@${server_info_arr[3]}";
    fi
}

#读取配置文件
# @param1 服务器信息配置表
function init_server_info_arr(){
    conf_file_path=$1
    lineCount=0;
    while read oneLine
    do
        lines[lineCount]=${oneLine}
        let lineCount++;
    done < ${conf_file_path}
}

#服务器信息打印
function print_server_list(){
    for i in "${!lines[@]}";
    do
        echo "  ${lines[i]}"
    done
}

#用户交互 输入检查
function input_check(){
    input=$1
    if [[ ${input} =~ ^[1-9]+$ ]] && [ ${input} -lt ${lineCount} ]
    then
        input="pass"
    else
        echo "wrong enter"
        exit
    fi
}

function interact_user(){
    read -p " which server to connect? Input the server id : " user_choose
    input_check "${user_choose}"
}

expect 自动交互代码

/Users/wangjia/bin/ssh/expect_login.sh

#!/usr/bin/expect -f
# author  : wangjia
# time    : 2016/12/21 11:10
# contact : [email protected]
# desc    : expect 登录
set timeout 3
#接受传入参数
set user_ip [lindex ${argv} 0]
set password [lindex ${argv} 1]

#套壳 根据 expect 发送 对应信息
spawn ssh ${user_ip}
expect {
"*assword:*" { send  "${password}\r"}
"*yes/no*" {send "yes\r" }
}
interact

调用

使用

. /Users/wangjia/bin/ssh/common_ssh.sh  #引用
init_server_info_arr "/Users/wangjia/bin/ssh/conf/server.conf"
print_server_list
interact_user
connect_by_line "${lines[${user_choose}]}"

你可能感兴趣的:(linux,shell,服务器,脚本,ssh)