shell批量執(zhí)行命令與文件傳輸腳本
需求:
對(duì)未進(jìn)行主機(jī)信任操作的服務(wù)器進(jìn)行批量操作
實(shí)現(xiàn):
由于ssh只能在交互模式中輸入服務(wù)器密碼進(jìn)行登錄登操作,不便于進(jìn)行大批量服務(wù)器進(jìn)行巡檢或日志采集。sshpass恰好又解決了這個(gè)問題,使用ssh -p passwd
可以實(shí)現(xiàn)命令行輸入密碼操作,便于進(jìn)行規(guī)模巡檢
腳本使用方法:
-
首先需要在腳本執(zhí)行機(jī)器上安裝sshpass,可以使用yum進(jìn)行安裝
# yum方式安裝 yum -y install sshpass
-
tools.sh腳本以及使用方式
#!/bin/bash # 利用sshpass實(shí)現(xiàn)對(duì)服務(wù)器進(jìn)行批量操作 arg_num=$# file=$2 cmd=$4 c1=$1 c3=$3 c4=$4 c5=$5 c6=$6 function main(){ if [ $arg_num -ne 4 ] && [[ $c1 != "-f" ]] then errorMessage exit 1 elif [[ $c3 = "-c" ]] then valus doCommand elif [[ $c3 = "-l" ]] && [[ $c5 = "-s" ]] then # sh tools.sh -f hostlist -l hostlist -s /home/ # scp -P 22022 hostlist 192.168.1.1:/home valus doScpLocalToServer elif [[ $c3 = "-s" ]] && [[ $c5 = "-l" ]] then valus doScpServerToLocal else errorMessage fi } function doScpLocalToServer(){ for ip in $iplist do for_num=`expr $for_num + 1` pd=`echo $passwordlist | awk -v k=$for_num '{print $k}'` echo -e "\033[32m ->->->->->->->->->->$ip<-<-<-<-<-<-<-<-<-<- \033[0m" sshpass -p $pd scp -r -P 22022 $c4 root@$ip:$c6 echo "$ip 文件傳輸完畢" done } function doScpServerToLocal(){ for ip in $iplist do for_num=`expr $for_num + 1` pd=`echo $passwordlist | awk -v k=$for_num '{print $k}'` echo -e "\033[32m ->->->->->->->->->->$ip<-<-<-<-<-<-<-<-<-<- \033[0m" sshpass -p $pd scp -r -P 22022 root@$ip:$c4 $c6 echo "$ip 文件傳輸完畢" done } function doCommand(){ echo "do $cmd" for ip in $iplist do for_num=`expr $for_num + 1` pd=`echo $passwordlist | awk -v k=$for_num '{print $k}'` echo -e "\033[32m ->->->->->->->->->->$ip<-<-<-<-<-<-<-<-<-<- \033[0m" sshpass -p $pd ssh -p22022 root@$ip "$cmd" done } function errorMessage(){ echo -e "\033[31m 腳本使用有誤!?。?\033[0m" echo -e "\033[33m -f 本地hostlist文件名,第一列為ip,第二列為服務(wù)器密碼 -c 遠(yuǎn)程執(zhí)行的命令,如使用特殊符號(hào),需要添加轉(zhuǎn)義符 -s 遠(yuǎn)程服務(wù)器文件路徑 -l 本地服務(wù)器文件路徑 舉個(gè)栗子 : 1.批量執(zhí)行命令 sh tools.sh -f hostlist -c \"hostname\" 2.批量文件拷貝 sh tools.sh -f hostlist -l /home/aaa.txt -s /opt/ #將本地/home/aaa.txt 文件傳輸至列表服務(wù)器的/opt/目錄下 sh tools.sh -f hostlist -s /var/log/messages -l /tmp/ #列表服務(wù)器的/var/log/messages日志文件拷貝到本地/tmp/目錄下 \033[0m " } function valus(){ if [ -f "$file" ]; then iplist=`awk '{print $1}' $file` passwordlist=`awk '{print $2}' $file` for_num=0 else echo -e "\033[31m 請(qǐng)檢查文件是否存在 ?。?! \033[0m" exit 4 fi } main
使用方式
文章來源:http://www.zghlxwxcb.cn/news/detail-710160.html
舉個(gè)例子
1. 遠(yuǎn)程執(zhí)行命令
[root@zhq-study zhq]# sh tools.sh -f hostlist -c "hostname"
do hostname
->->->->->->->->->->192.168.8.11<-<-<-<-<-<-<-<-<-<-
slave-01
->->->->->->->->->->192.168.8.12<-<-<-<-<-<-<-<-<-<-
slaves-02
注意:如果遠(yuǎn)程命令中含有特殊字符,需要使用轉(zhuǎn)義字符(\
),如下所示:文章來源地址http://www.zghlxwxcb.cn/news/detail-710160.html
# 錯(cuò)誤方式
[root@zhq-study zhq]# sh tools.sh -f hostlist -c "ifconfig | awk 'NR==2{print $2}'"
do ifconfig | awk 'NR==2{print }'
->->->->->->->->->->192.168.8.11<-<-<-<-<-<-<-<-<-<-
inet 192.168.8.11 netmask 255.255.255.0 broadcast 192.168.8.255
->->->->->->->->->->192.168.8.12<-<-<-<-<-<-<-<-<-<-
inet 192.168.8.12 netmask 255.255.255.0 broadcast 192.168.8.255
# 正確方式,
[root@zhq-study zhq]# sh tools.sh -f hostlist -c "ifconfig | awk 'NR==2{print \$2}'"
do ifconfig | awk 'NR==2{print $2}'
->->->->->->->->->->192.168.8.11<-<-<-<-<-<-<-<-<-<-
192.168.8.11
->->->->->->->->->->192.168.8.12<-<-<-<-<-<-<-<-<-<-
192.168.8.12
2. 執(zhí)行文件拷貝
- 將本地`/home/test.conf` 文件傳輸至列表服務(wù)器的`/opt/`目錄下
```sh
[root@zhq-study zhq]# sh tools.sh -f hostlist -l /home/test.conf -s /opt/
->->->->->->->->->->192.168.8.11<-<-<-<-<-<-<-<-<-<-
192.168.8.11 文件傳輸完畢
->->->->->->->->->->192.168.8.12<-<-<-<-<-<-<-<-<-<-
192.168.8.12 文件傳輸完畢
[root@zhq-study zhq]#
```
- 列表服務(wù)器的`/var/log/messages`日志文件拷貝到本地`/root/`目錄下
```sh
[root@zhq-study zhq]# sh tools.sh -f hostlist -s /var/log/messages -l /root/
->->->->->->->->->->192.168.8.11<-<-<-<-<-<-<-<-<-<-
192.168.8.11 文件傳輸完畢
->->->->->->->->->->192.168.8.12<-<-<-<-<-<-<-<-<-<-
192.168.8.12 文件傳輸完畢
[root@zhq-study zhq]#
```
到了這里,關(guān)于shell批量執(zhí)行命令與文件傳輸腳本的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!