Shell自動化配置SSH免密登錄和取消SSH免密配置腳本
1. 前文
搭建了一套有多臺主機(jī)的局域網(wǎng)環(huán)境,不完全考慮安全性的情況下,為方便管理局域網(wǎng)內(nèi)主機(jī),配置SSH免密登錄,因主機(jī)較多,前陣子針對配置ssh免密和取消ssh免密功能單獨(dú)寫了腳本來自動化批量部署,現(xiàn)把兩個功能封裝在一起做成交互式程序
2.實(shí)現(xiàn)代碼
#!/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文件異常,請檢查內(nèi)容" 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`) #安裝軟件檢測及部署環(huán)境配置 echo -e "》》》開始檢測依賴的必須組件是否安裝》》》\n" if [ `rpm -qa | grep "expect" &> /dev/null;echo $?` -ne 0 ] then echo -e "未安裝必須組件Expect,開始執(zhí)行安裝,請稍等..." ( 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 "該腳本可以實(shí)現(xiàn)批量部署和刪除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. 退出程序" #功能控制及實(shí)現(xiàn) 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 "》》》已創(chuàng)建公鑰文件,開始向遠(yuǎn)端服務(wù)器推送公鑰》》》" fi #循環(huán)控制 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]}" #自動化交互實(shí)現(xiàn)推送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 "###推送完成,嘗試免密登錄###" #推送公鑰成功免密結(jié)果通知 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登錄遠(yuǎn)端主機(jī)確認(rèn)" elif [[ "$nu" == "2" ]] then #自動化交互實(shí)現(xiàn)刪除配置免密的遠(yuǎn)程主機(jī)上的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登錄遠(yuǎn)端主機(jī)確認(rèn)" else echo -e "\033[41;37m 非法輸入,請檢查輸入!!! \033[0m" fi done
3. 使用方法
3.1 使用前準(zhǔn)備將代碼復(fù)制到腳本文件,賦予執(zhí)行權(quán)限提前準(zhǔn)備好IP地址用戶密碼文件
3.2 IP地址用戶密碼文件格式(注意!!!)
3.3 運(yùn)行腳本
#腳本名 IP地址用戶密碼文件 #舉例 ./ssh.sh host.txt #腳本會判斷調(diào)用腳本是否有指定IP地址用戶密碼文件,沒有的情況下會運(yùn)行腳本失敗并提示
4. 使用注意
4.1 IP地址用戶密碼文件格式請按照以上圖示標(biāo)準(zhǔn)填寫,內(nèi)容不正確時會出現(xiàn)等待ssh登錄或者重試的結(jié)果,這時候需要檢查配置文件的用戶名或者密碼是否錯誤
4.2 未在配置ssh免密的情況使用腳本,需要多次ctrl+c強(qiáng)制退出腳本
到此這篇關(guān)于Shell自動化配置SSH免密登錄和取消SSH免密配置腳本 的文章就介紹到這了,更多相關(guān)Shell SSH免密登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux dev 常見特殊設(shè)備介紹與應(yīng)用(loop,null,zero,full,random)
這篇文章主要介紹了linux dev 常見特殊設(shè)備介紹與應(yīng)用(loop,null,zero,full,random),需要的朋友可以參考下2015-10-10Ubuntu服務(wù)器配置apache2.4的限速功能shell腳本分享
這篇文章主要介紹了Ubuntu服務(wù)器配置apache2.4的限速功能shell腳本分享,本文直接給出腳本實(shí)現(xiàn)代碼,代碼相關(guān)原理都寫在了注釋里,需要的朋友可以參考下2015-03-03零基礎(chǔ)入門篇之Linux及Arm-Linux程序開發(fā)筆記
這篇文章主要介紹了零基礎(chǔ)入門篇之Linux及Arm-Linux程序開發(fā)筆記,需要的朋友可以參考下2015-10-10通過Spring Shell 開發(fā) Java 命令行應(yīng)用
這篇文章主要介紹了通過Spring Shell 開發(fā) Java 命令行應(yīng)用的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11