เป็น script ส่ง command ไปให้ทุก node ของ zimbra โดยต้องมีการติดตั้ง ssh key ของแต่ละเครื่อง และ ให้สิทธิ์ user ในการ run command บน user zimbra
- ขั้นตอนการติดตั้ง KEY
1 2 3 4 5 |
center:~> ssh-keygen -t rsa center:~> ssh saza@znode -p .ssh center:~> cat ~/.ssh/id_rsa.pub | ssh saza@znode 'cat >> .ssh/authorized_keys' |
ในบาง ssh version ให้ใส่ Key ไว้ใน .ssh/authorized_keys2 และ change permisstion 640
- ขั้นตอนให้ user run script ด้วย user zimbra ได้
แก้ไขไฟล์ /etc/sudoers เพิ่มไว้ท้ายไฟล์
saza ALL=(zimbra) NOPASSWD: ALL
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
#!/bin/bash user=saza zuser=zimbra lstser=/tmp/listserver.dat if [ ! -f $lstser ]; then sudo -u $zuser /opt/zimbra/bin/zmprov gas > $lstser fi arvg=${@} arg=0 aarvg=($@) #for item in "${aarvg[@]:3}" #do # echo "$item" #done #echo ${aarvg[@]:3} #echo ${aarvg[@]:1:1} getcommand() { for i in ${arvg}; do if [ "$arg" -ge 2 ]; then command="$command $i" fi let "arg += 1" done } chkserver() { for i in `cat $lstser`; do if [ "${aarvg[@]:1:1}" == "$i" ]; then result=$i break fi result='' done } case "$1" in list) rm -rf $lstser sudo -u $zuser /opt/zimbra/bin/zmprov gas > $lstser cat $lstser | awk '{system ("host " $1 " | cut -f 1,4 -d\\ " )}' ;; exec) if [ -z "$2" ]; then echo $"Usage: $1 {all|server name}" exit 1 fi case "$2" in all) getcommand if [ -z "$command" ]; then echo $"Usage: $2 {command}" else for x in `cat $lstser`; do echo "#$x : $command " ssh $user@$x sudo -u $zuser $command done fi ;; *) chkserver if [ -n "$result" ]; then getcommand if [ -z "$command" ]; then echo $"Usage: $2 {command}" RETVAL=1 else echo "#$result : $command " ssh $user@$result sudo -u $zuser $command fi else echo $"Usage: $1 {all|server name}" RETVAL=1 fi esac ;; *) echo $"Usage: $0 {list|exec}" RETVAL=1 esac exit $RETVAL |