Abner的博客

ssh常用脚本

· 263 words · 2 minutes to read
Categories: 工具

ssh登陆脚本 🔗

1.main.sh 🔗

#!/bin/bash
direc=`dirname $0`
function color(){
    blue="\033[0;36m"
    red="\033[0;31m"
    green="\033[0;32m"
    close="\033[m"
    case $1 in
        blue)
            echo -e "$blue $2 $close"
        ;;
        red)
            echo -e "$red $2 $close"
        ;;
        green)
            echo -e "$green $2 $close"
        ;;
        *)
            echo "Input color error!!"
        ;;
    esac
}

function copyright(){
    echo "#####################"
    color blue "   SSH Login Platform   "
    echo "#####################"
    echo
}

function underline(){
    echo "-----------------------------------------"
}

function main(){

while [ True ];do


    echo "序号 |       主机      | 登录方式 | 说明"
    underline
    awk 'BEGIN {FS=":"} {printf("\033[0;31m% 3s \033[m | %15s | %8s | %s\n",$1,$2,$5,$7)}' $direc/config.lst
    underline
    read -p '[*] 选择主机: ' number
    pw="$direc/config.lst"
    ipaddr=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $2}}' $pw)
    port=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $3}}' $pw)
    username=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $4}}' $pw)
    login_type=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $5}}' $pw)
    passwd=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $6}}' $pw)

    case $number in
        [0-9]|[0-9][0-9]|[0-9][0-9][0-9])
            if [[ "$login_type" == "pem" ]]; then
                color green "[*] 使用证书登录: $passwd"
                ssh -i $direc/keys/$passwd $username@$ipaddr -p $port
            elif [[ "$login_type" == "pwd" ]]; then
                color green "[*] 使用密码登录"
                expect -f $direc/login.exp $ipaddr $username $passwd $port
            else
                color red "[!] 未知的登录类型: $login_type"
            fi
        ;;
        "q"|"quit")
            exit
        ;;

        *)
            echo "Input error!!"
        ;;
    esac
done
}

copyright
main

2.login.exp 🔗

#!/usr/bin/expect -f
set TARGET [lindex $argv 0]
set USER [lindex $argv 1]
set PASSWD [lindex $argv 2]
set PORT [lindex $argv 3]
set timeout 10

spawn ssh $USER@$TARGET -p $PORT
expect {
    "*yes/no" {send "yes\r"; exp_continue}
    "*password:" {send "$PASSWD\r"}
}
interact

3.config.lst 🔗

{1序号}:{2服务器ip}:{3端口号}:{4用户名}:{pwd:5密码}:{6标签}
1:127.0.0.1:22:root:pwd:123456:本地test
2:127.0.0.1:22:1022:root:pem:a.pem:云测试环境

4.在main.sh目录下新建keys文件夹,将证书文件放在keys文件夹下,证书权限为600 🔗

Tags