我们在管理服务器的时候,很多时候是一台管理机器,多台放相同文件的服务器。有时候我们需要给这多台服务器传输文件,执行脚本或者命令,一台一台执行时间效率很低,这个脚本主要是不需要在客户端安装软件,使用方便,次脚本功能简单还在完善中,后面会慢慢修改完善功能。
下图是所有文件
auto_expect:
- #!/usr/bin/expect -f
- spawn rsync -avzP source root@$ip:dest
- expect {
- "(yes/no)?" {send "yes\r";exp_continue}
- "password:" {send "$pwd\r"}
- }
- expect eof
主要是通过调用实现批量自动与多台服务器交互。
Expect中,有三个重要的主命令,分别是spawn、expect、exp_send,这三个命令几乎存在于所有Expect脚本中,除了这些之外,还有很多Expect所特有的参数、变量,它们也作用与Expect的方方面面。
spawn激活,send发送到交互命令。
iplist_config:
存放ip和密码的配置文件,ip在前,密码和ip用tab隔开。
T_file.sh:
实现功能的脚本
- #!/usr/bin/expect -f
- ################define variables############## 定义变量
- path=`pwd`
- ################begin of main #################
- show_usage()
- {
- echo "USAGE:$0"
- echo " [-s | -source]"
- echo " [-d | -des ]"
- echo " [-h | -help ]"
- }
- auto_rsync()
- {
- while read iplist
- do
- ip=`echo $iplist | awk '{print $1}'`
- pwd=`echo $iplist | awk '{print $2}'`
- echo -e "$iplist\n"
- echo "rsync -avzp $source_file root@$ip:$des_file"
- sed -e "s;source;$source_file;g" auto_expect>auto_expect_rsync
- sed -i "s;dest;$des_file;g" auto_expect_rsync
- sed -i "s;\$ip;$ip;g" auto_expect_rsync
- sed -i "s;\$pwd;$pwd;g" auto_expect_rsync
- chmod +x $path/auto_expect_rsync
- $path/auto_expect_rsync
- done < $path/iplist_config
- }
- auto_ssh()
- {
- while read iplist
- do
- ip=`echo $iplist | awk '{print $1}'`
- pwd=`echo $iplist | awk '{print $2}'`
- echo -e "$iplist\n"
- echo "ssh root@$ip"
- sed -e "s;source;;g" auto_expect>auto_expect_ssh
- sed -i "s;rsync -avzP;ssh;g" auto_expect_ssh
- sed -i "s;:dest;;g" auto_expect_ssh
- sed -i "s;\$ip;$ip;g" auto_expect_ssh
- sed -i "s;\$pwd;$pwd;g" auto_expect_ssh
- chmod +x $path/auto_expect_ssh
- done < $path/iplist_config
- exit 1
- }
- if [ $# -ne 4 ];then
- echo -e "\e[32;5;1m please input current!! \e[0m\n"
- show_usage;
- exit 1;
- fi
- while true
- do
- case "$1" in
- -h | -help)
- show_usage
- ;;
- -s | -source) source_file=$2
- echo $soutce_file
- shift 2
- ;;
- -d | -dest) des_file=$2
- echo $des_file
- auto_rsync
- auto_ssh
- ;;
- *)
- show_usage
- exit 1
- ;;
- esac
- done
执行的时候,把所以服务器的ip和密码存放在iplist_config文件中去。
sh T_file.sh -s source_path -d des_path
-s后面加源文件地址,-d后面加需要传输到的目的地址。
转载于:https://blog.51cto.com/xiaofeier/1061654