shell批量执行命令与文件传输脚本
需求:
对未进行主机信任操作的服务器进行批量操作
实现:
由于ssh只能在交互模式中输入服务器密码进行登录登操作,不便于进行大批量服务器进行巡检或日志采集。sshpass恰好又解决了这个问题,使用ssh -p passwd
可以实现命令行输入密码操作,便于进行规模巡检
脚本使用方法:
-
首先需要在脚本执行机器上安装sshpass,可以使用yum进行安装
# yum方式安装 yum -y install sshpass
-
tools.sh脚本以及使用方式
#!/bin/bash # 利用sshpass实现对服务器进行批量操作 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 "33[32m ->->->->->->->->->->$ip->->->->->->->->->$ip->->->->->->->->->$ip
使用方式
举个例子
1. 远程执行命令
[root@zhq-study zhq]# sh tools.sh -f hostlist -c "hostname"
do hostname
->->->->->->->->->->192.168.8.11->->->->->->->->->192.168.8.12
注意:如果远程命令中含有特殊字符,需要使用转义字符(),如下所示:
# 错误方式
[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->->->->->->->->->192.168.8.12->->->->->->->->->192.168.8.11->->->->->->->->->192.168.8.12
2. 执行文件拷贝
- 将本地`/home/test.conf` 文件传输至列表服务器的`/opt/`目录下
```sh
[root@zhq-study zhq]# sh tools.sh -f hostlist -l /home/test.conf -s /opt/
->->->->->->->->->->192.168.8.11->->->->->->->->->192.168.8.12->->->->->->->->->192.168.8.11->->->->->->->->->192.168.8.12