在Linux服務器之間自動拷貝文件的方法。主要使用了基于ssh的并且安全的文件copy技術(shù)——scp。這種方法安全并且便捷,無需輸入登錄密碼。
我們先設定一下場景和需求:每天凌晨4點30分,服務器A的文件自動同步到服務器B。我們可以認為服務器A是服務端,服務器B是客戶端。下面演示如何達到這個目標。
①在客戶端(服務器B)生成一對公鑰和秘鑰。使用ssh-keygen -t rsa生成,一路回車即可;
②進入秘鑰文件夾查看文件。其中id_rsa.pub是公鑰,id_rsa是私鑰;
進入文件夾 ? ? ? ? ? cd ~/.ssh
③打開id_rsa.pub文件,并把它的內(nèi)容拷貝到服務端(服務器A)的authorizedkeys文件中;或者直接使用ssh-copy-id命令把idrsa.pub拷貝到服務器A中。如下命令,按提示輸入登錄密碼即可拷貝。注意,假如服務器只能用SSH秘鑰文件登錄,則ssh-copy-id命令無法使用,只能編輯authorized_keys文件。
ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip_address
④在客戶端(服務器B)編寫文件拷貝的腳本;
#!/bin/sh
#copy data from remote server. you should copy your client's id_rsa.pub content to the server's ~/.ssh/authorized_keys file
#this script run at client
scp -r root@x.xx.xxx.xxxx:/var/www/html/hellojammy/* /var/www/html/hellojammy/
exit 0;
其中,x.xx.xxx.xxxx是服務端(服務器A)的ip地址。這段腳本的作用是拷貝服務器B的/var/www/html/hellojammy/目錄下的所有文件(包括子文件夾下的文件),到服務器A的/var/www/html/hellojammy/目錄。腳本文件為scp_test.sh
⑤在客戶端(服務器B)編寫定時任務腳本,執(zhí)行文件拷貝的命令。
1 //編輯定時任務
2 crontab -e
3 ?//添加定時任務
30 4 * * * /bin/sh /data/script/scp_test.sh > /data/script/logs/scp_test.log 2>&1
至此,完成!