脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - shell - Shell自动化配置SSH免密登录和取消SSH免密配置脚本

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

2023-03-01 13:51Cosann shell

本文主要介绍了Shell自动化配置SSH免密登录和取消SSH免密配置脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. 前文

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

2.实现代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/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 "yes\r";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 "exit\r"
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/null\r"
        expect "*]#"
        send "exit\r"
EOF
        done
        echo -e "-------------------------------------------"
        echo -e "已取消SHH免密配置,请尝试SHH登录远端主机确认"
 
    else
        echo -e "\033[41;37m 非法输入,请检查输入!!! \033[0m"
    fi
done

3. 使用方法

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

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

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

3.3 运行脚本

?
1
2
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免密登录内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.51cto.com/u_15538119/5518663

延伸 · 阅读

精彩推荐