Shell自动化配置SSH免密登录和取消SSH免密配置脚本

1. 前文

搭建了一套有多台主机的局域网环境,不完全考虑安全性的情况下,为方便管理局域网内主机,配置SSH免密登录,因主机较多,前阵子针对配置ssh免密和取消ssh免密功能单独写了脚本来自动化批量部署,现把两个功能封装在一起做成交互式程序

2.实现代码

#!/bin/bash
#Author:cosann
#Version:0.2
#date:2022/7/27
#description:批量部署SSH免密登录脚本

E_ERROR=65

#传参检测
if [ $# -ne 1 ]
then 
    echo -e "Usage:$0 ip_list_file "
    exit E_ERROR
fi

#文件检测
if [ ! -f "$1" ]
then
    echo -e "IP_List_File $1文件异常,请检查内容"
    exit E_ERROR
fi 

#初始化
ip_list_file=$1
#从文本读取值初始化变量
ip_address=(`awk '{print $1}' $ip_list_file`)
username=(`awk '{print $2}' $ip_list_file`)
password=(`awk '{print $3}' $ip_list_file`)

#安装软件检测及部署环境配置
echo -e "》》》开始检测依赖的必须组件是否安装》》》n"
if [ `rpm -qa | grep "expect" &> /dev/null;echo $?` -ne 0 ]
then
    echo -e "未安装必须组件Expect,开始执行安装,请稍等..."
    ( yum install -y expect &> /dev/null && echo -e ">Expect安装完成!" ) || ( echo -e "部署必须组件Expect失败,请检查Yum配置" && exit E_ERROR )
elif [ `rpm -qa | grep "openssl" &> /dev/null;echo $?` -ne 0 ]
then
    ( yum install -y openssh &> /dev/null && echo -e ">Openssh安装完成!" ) || ( echo -e "部署必须组件Openssh失败,请检查Yum配置" && exit E_ERROR )
elif [ `rpm -qa | grep "openssh-clients" &> /dev/null;echo $?` -ne 0 ]
then
    ( yum install -y openssh-clients &> /dev/null && echo -e ">Openssh-clients安装完成!" ) || ( echo -e "部署必须组件Openssh-clients失败,请检查Yum配置" && exit E_ERROR )
else
    echo -e ">必须组件Expect已安装"
    echo -e ">必须组件Openssh已安装"
    echo -e ">必须组件Openssh-clients已安装"
fi


#打印菜单
echo -e "n===============================================" 
echo -e "该脚本可以实现批量部署和删除SSH免密配置"   
echo -e "Author:Cosann"
echo -e "Create time:2022/07/27"
echo -e "===============================================" 
    while :
    do
    echo -e ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" 
    echo -e "1. 配置SHH免密登录"
    echo -e "2. 取消SHH免密配置"
    echo -e "3. 退出程序"
    
    #功能控制及实现
    read -p "请输入序号>>> " nu
    if [[ "$nu" == "3" ]]
    then
        #退出程序
        echo -e "n###!!!感谢使用,再见!!!###"

        exit 0
    elif [[ "$nu" == "1" ]]
    then    
        echo "开始推送"
        #检测公钥文件是否存在,不存在则生成
        if [ ! -e "$HOME/.ssh/id_rsa.pub" ];then
            ssh-keygen -t rsa -P '' -f $HOME/.ssh/id_rsa
        else
            echo -e "》》》已创建公钥文件,开始向远端服务器推送公钥》》》"
        fi

        #循环控制
        count=`grep -v '^$' $ip_list_file | wc -l `
        for (( i=0;i<$count;i++ ))
        do
            #echo -e "${ip_address[$i]}t${username[$i]}t${password[$i]}"
            #自动化交互实现推送ssh公钥
            /usr/bin/expect<<-EOF
            spawn ssh-copy-id -i $HOME/.ssh/id_rsa.pub ${username[$i]}@${ip_address[$i]}
            expect {
            "*yes/no"    { send "yesr";exp_continue }
            "*password"  { send "${password[$i]}r" }
        }
        expect eof
EOF
        done
        echo -e "--------------------------------------------------------------------------------------"
        echo -e "--------------------------------------------------------------------------------------"
        echo -e "--------------------------------------------------------------------------------------"
        echo -e "###推送完成,尝试免密登录###"
        #推送公钥成功免密结果通知
        for (( i=0;i<$count;i++ ))
        do
            /usr/bin/expect<<-EOF
            spawn ssh ${username[$i]}@${ip_address[$i]}
            expect "*]#"
            send "echo "##登录成功##"r"
            expect "*]#"
            send "exitr"
EOF
        done
        echo -e "-------------------------------------------"
        echo -e "已完成SHH免密配置,请尝试SHH登录远端主机确认"

    elif [[ "$nu" == "2" ]]
    then
        #自动化交互实现删除配置免密的远程主机上的authorized_keys
        count=`grep -v '^$' $ip_list_file | wc -l `
        for (( i=0;i<$count;i++ ))
        do
        /usr/bin/expect<<-EOF
        spawn ssh ${username[$i]}@${ip_address[$i]}
        expect "*]#"    
        send "rm -f /root/.ssh/authorized_keys 2> /dev/nullr"
        expect "*]#"
        send "exitr"
EOF
        done 
        echo -e "-------------------------------------------"
        echo -e "已取消SHH免密配置,请尝试SHH登录远端主机确认"

    else
        echo -e "33[41;37m 非法输入,请检查输入!!! 33[0m"
    fi
done

3. 使用方法

3.1 使用前准备将代码复制到脚本文件,赋予执行权限提前准备好IP地址用户密码文件

3.2 IP地址用户密码文件格式(注意!!!)

Shell自动化配置SSH免密登录和取消SSH免密配置脚本

3.3 运行脚本

#脚本名 IP地址用户密码文件
#举例
./ssh.sh host.txt	#脚本会判断调用脚本是否有指定IP地址用户密码文件,没有的情况下会运行脚本失败并提示

Shell自动化配置SSH免密登录和取消SSH免密配置脚本

4. 使用注意

4.1 IP地址用户密码文件格式请按照以上图示标准填写,内容不正确时会出现等待ssh登录或者重试的结果,这时候需要检查配置文件的用户名或者密码是否错误

Shell自动化配置SSH免密登录和取消SSH免密配置脚本

4.2 未在配置ssh免密的情况使用脚本,需要多次ctrl+c强制退出脚本

Shell自动化配置SSH免密登录和取消SSH免密配置脚本

到此这篇关于Shell自动化配置SSH免密登录和取消SSH免密配置脚本 的文章就介绍到这了,更多相关Shell SSH免密登录内容请搜索aitechtogether.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持aitechtogether.com!

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年4月26日
下一篇 2023年4月26日

相关推荐