MacOs 自动登录 ssh

Tegic 于 2020-02-25 发布

在任何目录创建一个文件夹 ssl,我本机最终的地址是 /Users/tegic/ssh/Users/tegic/ssh 下面创建三个文件

login.sh
password.lst
ssh_login.exp

login.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 "$blue $2 $close"
        ;;
        red)
            echo "$red $2 $close"
        ;;
        green)
            echo "$green $2 $close"
        ;;
        *)
            echo "Input color error!!"
        ;;
    esac
}

function copyright(){
    echo ""
    color green "   SSH 登录平台   "
    echo ""
}

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

function main(){

while [ True ];do

    underline
    echo "序号 |       主机      | 说明"
    underline
    awk 'BEGIN {FS=":"} {printf("\033[0;31m% 3s \033[m | %15s | %s\n",$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 文件

#!/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

最后一个文件password.lst,当前我们只需要改动这个文件。里面是你服务器的相关信息 格式如下,一个服务器一行数据。

序号:ip地址:22:账号:密码:简介

设置指令别名

vi ~/.profile
alias sl="/bin/sh /Users/tegic/ssh/login.sh"
. ~/.profile

然后直接在终端输入 sl 就能看到效果了