shell批量多台服务器数据copy

本文介绍了一套用于批量管理服务器的Shell脚本集合,包括免密登录设置、文件同步、命令执行等功能,适用于运维人员进行多台服务器的统一管理。
  1. 实验服务器两台:

    192.168.77.189

    192.168.77.190

  2. 服务器免密钥登录设置:

    [root@192_168_77_189 ~]# ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    95:cf:19:a5:ff:d0:bc:80:f5:de:5a:4c:b5:63:ae:c6 root@192_168_77_189
    The key's randomart image is:
    +--[ RSA 2048]----+
    |              .  |
    |           . o   |
    |          o o.  .|
    |         . oo+.oo|
    |        S  .+.o=+|
    |              ==+|
    |            .  +=|
    |             E.o |
    |            ...  |
    +-----------------+
    [root@192_168_77_189 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.77.190
    root@192.168.77.190's password: 
    Now try logging into the machine, with "ssh '192.168.77.190'", and check in:

      .ssh/authorized_keys

    to make sure we haven't added extra keys that you weren't expecting.

    [root@192_168_77_189 ~]# ssh 192.168.77.190
    Last login: Sun Jul  5 23:16:20 2015 from 192.168.77.100
    [root@192_168_77_190 ~]# clear
    [root@192_168_77_190 ~]# 
    [root@192_168_77_190 ~]# 
    [root@192_168_77_190 ~]# exit

  3. copy脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
#write by lixi
#time by 2015-7-7 
#run by sh auto.shell.sh /root /mnt
if    [ ! -f ip.txt ] ; then
echo -e "\033[32mplease create ip.txt files...\033[0m"
cat << EOF
192.168.149.128
192.168.149.129
EOF
        exit
fi
if
  [ -z "$1" ] ; then
        echo -e "\033[32mUsage $0 command,example{src_file|src_dir Des_dir\033[0m}"
        exit
fi
count=`cat ip.txt | wc -l`
rm -rf ip.txt.swp
i=0
while  ((i<$count))
do
i=`expr $i + 1`
sed "${i}s/^/&${i} /g"  ip.txt >> ip.txt.swp
IP=`awk -v I="$i" '{if(I==$1)print $2}' ip.txt.swp`
scp -r $1 root@${IP}:$2
#rsync -ap --delete $1 root@${IP}:$2
done

以上脚本用rsync也可以,,,rsync同步两个文件一样,,,例如sh auto.shell.sh /opt/ /opt/保持两个服务器之间这个目录文件一样

4.批量远程服务器执行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
# Auto run server commend
# by lx 2015-7-7
if [ ! -f ip.txt ]; then
        echo -e "\033[32mplease create ip.txt files...\033[0m"
cat << EOF
192.168.149.128
192.168.149.129
EOF
        exit
fi
if 
        [ -z "$*" ] ; then
        echo -e "\033[32mUsage: $0 Commend,Example{rm /tmp/text.txt|mkdir /tmp/text2}\033[0m"
        exit
fi
        count=`cat ip.txt | wc -l`
        rm -rf ip.txt.swp
        i=0
while ((i<$count))
do
        i=`expr $i + 1`
        sed "${i}s/^/&${i} /g" ip.txt >>ip.txt.swp
        IP=`awk -v I="$i" '{if(I==$1)print $2}' ip.txt.swp`
ssh -q -l root $IP "$*; echo -e '-----------------------\nthe $IP Exec command:
$* success !';sleep 2"
done
1
2
3
4
5
6
7
root@192_168_77_189 ~]# sh auto_ssh.sh mkdir /tmp/text2
-----------------------
the 192.168.77.190 Exec command:
mkdir /tmp/text2 success !
-----------------------
the 192.168.77.189 Exec command:
mkdir /tmp/text2 success !

5.服务器之前文件同步:

#!/bin/bash
#by lixi 2015.7.7

#run by sh auto_rsync.sh flush

flush()
{
if 
        [ ! -f rsync.list ]; then
        echo -e "\033[32mplease create rsync.list file...\033[0m"
cat << EOF
192.168.149.128 src_dir  des_dir
192.168.149.129 src_dir  des_dir
EOF
        exit
fi
        rm -rf rsync.list.swp ; cat rsync.list | grep -v "#" >rsync.list.swp
        COUNT=`cat rsync.list.swp|wc -l`
        NUM=0
while ((${NUM} < $COUNT))
do
        NUM=`expr $NUM + 1`
        Line=`sed -n "${NUM}p" rsync.list.swp`
        SRC=`echo $Line |awk '{print $2}'`
        DES=`echo $Line |awk '{print $3}'`
        IP=`echo $Line |awk '{print $1}'`
        rsync -ap --delete ${SRC}/   root@${IP}:${DES}/
done
}
restart()
{
        rm -rf restart.list.swp ; cat restart.list | grep -v "#" >> restart.list.swp
       COUNT=`cat restart.list.swp|wc -l`
        NUM=0
while ((${NUM} < $COUNT))
do
         NUM=`expr $NUM + 1`
        Line=`sed -n "${NUM}p" restart.list.swp`
        Command=`echo $Line |awk '{print $2}'`
        IP=`echo $Line |awk '{print $1}'`
        ssh -l root $IP "sh $Command; echo -e '----------------\nthe $IP Exec Commadn : sh $Command success !'"
done
}
case $1 in
        flush )
        flush
        ;;
        restart )
        restart
        ;;
        * )
        echo -e "\033[32mUsage: $0 command,example {flush|restart}\033[0m"
        ;;
esac  

                                                                              



本文转自 Anonymous123 51CTO博客,原文链接:http://blog.51cto.com/woshitieren/1671863

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值