Shell脚本自动化配置SSH免密登录和取消SSH免密配置脚本
Posted Cosann
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本自动化配置SSH免密登录和取消SSH免密配置脚本相关的知识,希望对你有一定的参考价值。
1. 前文
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 "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地址用户密码文件格式(注意!!!)
3.3 运行脚本
#脚本名 IP地址用户密码文件
#举例
./ssh.sh host.txt #脚本会判断调用脚本是否有指定IP地址用户密码文件,没有的情况下会运行脚本失败并提示
4. 使用注意
4.1 IP地址用户密码文件格式请按照以上图示标准填写,内容不正确时会出现等待ssh登录或者重试的结果,这时候需要检查配置文件的用户名或者密码是否错误
4.2 未在配置ssh免密的情况使用脚本,需要多次ctrl+c强制退出脚本
代码干货分享,如果你有不一样的想法,欢迎一起交流学习~
以上是关于Shell脚本自动化配置SSH免密登录和取消SSH免密配置脚本的主要内容,如果未能解决你的问题,请参考以下文章