You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. #!/bin/bash
  2. if [ "$#" -ne 2 ]; then
  3. echo
  4. echo -e "######################################################################"
  5. echo -e "######\033[41;37m Wrong paraments input, please refer below usage info !!! \033[0m######"
  6. echo -e "######################################################################"
  7. echo
  8. echo -e "Usage: \033[44;37m./<cmd.sh> <Remote ssh ID> <Remote ssh IP>\033[0m"
  9. echo -e "Example\t: \033[45;37m$0 ed 127.0.0.1\033[0m"
  10. echo; exit 1
  11. fi
  12. BAK_Project=Gitea_ED
  13. WHO=`whoami`
  14. HOSTNAME=`hostnamectl | grep "Static hostname" | awk '{print $NF}'`
  15. TS=`date +"%Y%m%d-%H%M%S"`
  16. # Host Local Backup info setup
  17. WORK_Folder=/ED/$BAK_Project/Script_$BAK_Project
  18. Source_BAK_Folder=/ED/$BAK_Project/Backup_file
  19. BAK_1=$Source_BAK_Folder/backup-mysql-$BAK_Project.gz
  20. BAK_2=$Source_BAK_Folder/Script_$BAK_Project.tar
  21. BAK_3=$Source_BAK_Folder/Source_Files_$BAK_Project.tar
  22. # Remote ssh Backup info setup
  23. PW_File=/home/$WHO/PW/Remote_ssh.info
  24. ID=$1
  25. IP=$2
  26. Remote_BAK_Folder_BAK_Disk_X=/BAK_Disk_A/$HOSTNAME/$BAK_Project/Backup_file
  27. Remote_BAK_Folder_BAK_Disk_Y=/BAK_Disk_B/$HOSTNAME/$BAK_Project/Backup_file
  28. REMOTE_X_BAK_1=$Remote_BAK_Folder_BAK_Disk_X/backup-mysql-$BAK_Project-$TS.gz
  29. REMOTE_X_BAK_2=$Remote_BAK_Folder_BAK_Disk_X/Script_$BAK_Project-$TS.tar
  30. REMOTE_X_BAK_3=$Remote_BAK_Folder_BAK_Disk_X/Source_Files_$BAK_Project-$TS.tar
  31. REMOTE_Y_BAK_1=$Remote_BAK_Folder_BAK_Disk_Y/backup-mysql-$BAK_Project-$TS.gz
  32. REMOTE_Y_BAK_2=$Remote_BAK_Folder_BAK_Disk_Y/Script_$BAK_Project-$TS.tar
  33. REMOTE_Y_BAK_3=$Remote_BAK_Folder_BAK_Disk_Y/Source_Files_$BAK_Project-$TS.tar
  34. ##### Func
  35. CHK_WORK_Folder (){
  36. echo -e "\033[32mCheck Work Folder ($WORK_Folder) \033[0m"
  37. ls $WORK_Folder > /dev/null 2>&1
  38. if [[ $? == 0 ]]; then
  39. echo -e " \033[34mPass. \033[0m"
  40. else
  41. echo -e " \033[31mFail. Exit.\033[0m"
  42. echo
  43. exit
  44. fi
  45. }
  46. CHK_SRC_BAK_Folder (){
  47. echo -e "\033[32mCheck local Backup source folder ($Source_BAK_Folder) \033[0m"
  48. ls $Source_BAK_Folder > /dev/null 2>&1
  49. if [[ $? == 0 ]]; then
  50. echo -e " \033[34mPass. \033[0m"
  51. else
  52. echo -e " \033[31mFail. Exit.\033[0m"
  53. echo
  54. exit
  55. fi
  56. }
  57. CHK_PW_File (){
  58. echo -e "\033[32mCheck PW file ($PW_File) \033[0m"
  59. ls $PW_File > /dev/null 2>&1
  60. if [[ $? == 0 ]]; then
  61. echo -e " \033[34mPass. \033[0m"
  62. SSH_ID=`cat $PW_File | grep ID | awk '{print $NF}'`
  63. if [[ $SSH_ID != "" ]]; then
  64. echo -e " - \033[34mSSH ID: Good \033[0m"
  65. else
  66. echo -e " - \033[31mSSH ID: Bad. ID is empty\033[0m"
  67. fi
  68. SSH_PW=`cat $PW_File | grep PW | awk '{print $NF}'`
  69. if [[ $SSH_PW != "" ]]; then
  70. echo -e " - \033[34mSSH PW: Good \033[0m"
  71. else
  72. echo -e " - \033[31mSSH PW: Bad. ID is empty\033[0m"
  73. fi
  74. else
  75. echo -e " \033[31mFail. There is no PW file ($PW_File). Please make a new one. Exit. \033[0m"
  76. echo -e " Example of $PW_File: "
  77. echo -e " ID xxxx"
  78. echo -e " PW zzzzzzzz"
  79. echo
  80. exit
  81. fi
  82. }
  83. CHK_REMOTE_IP_AVA (){
  84. echo -e "\033[32mCheck IP ($IP) availiable - ping ($IP) \033[0m"
  85. ping -c1 $IP > /dev/null 2>&1
  86. if [[ $? == 0 ]]; then
  87. echo -e " \033[34mPass. \033[0m"
  88. else
  89. echo -e " \033[31mFail. There is no ping in IP ($IP). Exit \033[0m"
  90. echo
  91. exit
  92. fi
  93. }
  94. CHK_BAK1 (){
  95. echo -e "\033[32mCheck local Backup file status ($BAK_1) \033[0m"
  96. ls $BAK_1 > /dev/null 2>&1
  97. if [[ $? == 0 ]]; then
  98. echo -e " \033[34mPass. \033[0m"
  99. else
  100. echo -e " \033[33mWarning! There is no local backup file ($BAK_1).\033[0m"
  101. echo
  102. fi
  103. }
  104. CHK_BAK2 (){
  105. echo -e "\033[32mCheck local Backup file status ($BAK_2) \033[0m"
  106. ls $BAK_2 > /dev/null 2>&1
  107. if [[ $? == 0 ]]; then
  108. echo -e " \033[34mPass. \033[0m"
  109. else
  110. echo -e " \033[33mWarning! There is no local backup file ($BAK_2).\033[0m"
  111. echo
  112. fi
  113. }
  114. CHK_BAK3 (){
  115. echo -e "\033[32mCheck local Backup file status ($BAK_3) \033[0m"
  116. ls $BAK_2 > /dev/null 2>&1
  117. if [[ $? == 0 ]]; then
  118. echo -e " \033[34mPass. \033[0m"
  119. else
  120. echo -e " \033[33mWarning! There is no local backup file ($BAK_3).\033[0m"
  121. echo
  122. fi
  123. }
  124. MKDIR_REMOTE_BAK_Folder_BAK_Disk_X (){
  125. echo -e "\033[32mmkdir Remote Backup folder alwyass ($ID@$IP:$Remote_BAK_Folder_BAK_Disk_X) \033[0m"
  126. expect -c "
  127. spawn ssh $ID@$IP \"mkdir -p $Remote_BAK_Folder_BAK_Disk_X;\"
  128. expect {
  129. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  130. \"yes/no\" {send \"yes\r\"; }
  131. }
  132. expect eof"
  133. }
  134. MKDIR_REMOTE_BAK_Folder_BAK_Disk_Y (){
  135. echo -e "\033[32mmkdir Remote Backup folder alwyass ($ID@$IP:$Remote_BAK_Folder_BAK_Disk_Y) \033[0m"
  136. expect -c "
  137. spawn ssh $ID@$IP \"mkdir -p $Remote_BAK_Folder_BAK_Disk_Y;\"
  138. expect {
  139. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  140. \"yes/no\" {send \"yes\r\"; }
  141. }
  142. expect eof"
  143. }
  144. SCP_TO_BAK_Disk_X (){
  145. echo -e "\033[32mSCP the backup files to Backup_Disk_X...\033[0m"
  146. expect -c "
  147. spawn scp $BAK_1 $ID@$IP:$REMOTE_X_BAK_1
  148. expect {
  149. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  150. \"yes/no\" {send \"yes\r\"; }
  151. }
  152. expect eof"
  153. expect -c "
  154. spawn scp $BAK_2 $ID@$IP:$REMOTE_X_BAK_2
  155. expect {
  156. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  157. \"yes/no\" {send \"yes\r\"; }
  158. }
  159. expect eof"
  160. expect -c "
  161. spawn scp $BAK_3 $ID@$IP:$REMOTE_X_BAK_3
  162. expect {
  163. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  164. \"yes/no\" {send \"yes\r\"; }
  165. }
  166. expect eof"
  167. }
  168. SCP_TO_BAK_Disk_Y (){
  169. echo -e "\033[32mSCP the backup files to Backup_Disk_Y...\033[0m"
  170. expect -c "
  171. spawn scp $BAK_1 $ID@$IP:$REMOTE_Y_BAK_1
  172. expect {
  173. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  174. \"yes/no\" {send \"yes\r\"; }
  175. }
  176. expect eof"
  177. expect -c "
  178. spawn scp $BAK_2 $ID@$IP:$REMOTE_Y_BAK_2
  179. expect {
  180. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  181. \"yes/no\" {send \"yes\r\"; }
  182. }
  183. expect eof"
  184. expect -c "
  185. spawn scp $BAK_3 $ID@$IP:$REMOTE_Y_BAK_3
  186. expect {
  187. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  188. \"yes/no\" {send \"yes\r\"; }
  189. }
  190. expect eof"
  191. }
  192. CHK_WORK_Folder
  193. CHK_SRC_BAK_Folder
  194. CHK_PW_File
  195. CHK_REMOTE_IP_AVA
  196. CHK_BAK1
  197. CHK_BAK2
  198. CHK_BAK3
  199. #MKDIR_REMOTE_BAK_Folder_BAK_Disk_X
  200. #SCP_TO_BAK_Disk_X
  201. #MKDIR_REMOTE_BAK_Folder_BAK_Disk_Y
  202. #SCP_TO_BAK_Disk_Y
  203. echo
  204. echo -e "\033[33mDone \033[0m"
  205. echo