zoukankan      html  css  js  c++  java
  • Linux Shell ssh登录脚本

      Linux 登陆服务器敲命令太多,某时候确实不便,所以就用shell写了一个

     我的blog地址: http://www.cnblogs.com/caoguo

    一.说明

    • 支持秘密和密钥两种格式
    • 用户名和密码都是写文件的,明文保存

    二.配置

    • 密码文件配置:

    序号:IP:端口:用户:密码:说明 1:192.168.88.128:22:root:toor:虚拟机web服务器

    • 密钥文件放在keys文件夹下,密码位置写成密钥文件名,文件名必须以.pem结尾

    github地址:https://github.com/ca0gu0/so

    脚本下载:git clone git@github.com:ca0gu0/so.git

    补充:

    发现没有代码还是不好,把代码还是贴上

    so.sh文件的内容

    #!/bin/bash
    
    
    direc=`dirname $0`
    function color(){
        blue="33[0;36m"
        red="33[0;31m"
        green="33[0;32m"
        close="33[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("33[0;31m% 3s 33[m | %15s | %s
    ",$1,$2,$6)}' $direc/password.lst
        underline
        read -p '[*] 选择主机: ' number
        pw="$direc/password.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)
        passwd=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $5}}' $pw)
    
        case $number in
            [0-9]|[0-9][0-9]|[0-9][0-9][0-9])
                echo $passwd | grep -q ".pem$"
                RETURN=$?
                if [[ $RETURN == 0 ]];then
                    ssh -i $direc/keys/$passwd $username@$ipaddr -p $port
                    echo "ssh -i $direc/$passwd $username@$ipaddr -p $port"
                else
                    expect -f $direc/ssh_login.exp $ipaddr $username $passwd $port
                fi
            ;;
            "q"|"quit")
                exit
            ;;
    
            *)
                echo "Input error!!"
            ;;
        esac
    done
    }
    
    copyright
    main

    ssh_login.exp 这个一个expect脚本,用户写交互的工具

    #!/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
    "; exp_continue}
        "*password:" {send "$PASSWD
    "}
    }
    interact

    password.lst密码文件格式

    1:192.168.88.128:22:root:toor:虚拟机web服务器
    2:192.168.88.130:22:ca0gu0:toor:虚拟机mysql数据库服务器
    103:192.168.88.4:22:root:sellercube:本地开发服务器

  • 相关阅读:
    HTTP断点续传 规格严格
    Java Shutdown 规格严格
    linux 命令源码 规格严格
    JTable调整列宽 规格严格
    linux 多CPU 规格严格
    Hello can not find git path 规格严格
    Kill 规格严格
    拜拜牛人 规格严格
    Swing 规格严格
    Debugging hangs in JVM (on AIX but methodology applicable to other platforms) 规格严格
  • 原文地址:https://www.cnblogs.com/caoguo/p/4865413.html
Copyright © 2011-2022 走看看