■ 河南 許紅軍
編者按:使用SCP (即Secure Copy Protocol)命令,可以在Linux下進行遠程傳輸文件的功能。和CP等復制命令不同,SCP不僅可以跨服務器復制文件,還能夠實現加密傳輸。在實際工作中,靈活的使用SCP命令,可以有效提高文件復制的效率。
當使用SCP命令向遠程主機傳送文件時,默認是需要輸入密碼的,這給實際操作帶來了繁瑣。其實,在安全的環(huán)境中,使用無密碼傳輸,可以大大提高效率。
例如,在Server1上執(zhí)行“ssh-keygen -t rsa”命令,在提示信息中連續(xù)回車,選擇默認存儲位置并不設置密碼。執(zhí)行“l(fā)s.ssh/”命令,查看生成的密鑰信息。進入該目錄,執(zhí)行“mv id_rsa.pub authorized_keys”命令,對公鑰進行更名處理。
執(zhí)行“chmod 600 .ssh/authorized_keys”命令,為其設置合適的權限。
注意,該公鑰必須位于當前用戶的家目錄中的“.ssh”目錄中,而且該“.ssh”文件夾的權限必須為700。
執(zhí)行“scp .ssh/id_rsa root@x.x.x.x:~”命令,將私鑰文件傳送到Srver2主機上,“x.x.x.x”表示 Server2的地址。
在Server2主機行執(zhí)行“mv id_rsa .ssh/”命令,將其移動到“.ssh”目錄下。
這樣,從Server2上使用SCP命令向Server1傳輸文件,是不需要輸入密鑰的,但是反之則不行。因為必須擁有對方的私鑰文件,才可以無密碼傳輸。
在很多情況下,需要在指定的時間(例如凌晨等)執(zhí)行數據備份任務,將SCP命令和定時任務結合起來,就可以很輕松的解決該問題。
執(zhí)行“vi remotebacku p.sh”命令,創(chuàng)建腳本文件。
在其中輸入“#!/bin/bash”,“time=`date+%F_%H-%M-%S`”“scp-r /home/data/ root@x.x.x.x:/home/backup_${time}”行,對指定目 錄(如 /home/data/”)執(zhí)行遠程復制操作。其中“-r”參數標書復制整個目錄。
為了提高備份的靈活性,避免備份的數據相互覆蓋,這里通過記錄備份時的時間信息,將其附加的目標文件的名稱后面,來達到保存不同時間點備份文件的作用。
執(zhí)行“crontab -e”命令,輸入“0 1 * * * /bin/bash/root/scripts/remote_copy1.sh”等內容,在指定的時間(例如凌晨1點)執(zhí)行該腳本文件。這樣,當到達預設的時間后,就可以自動備份數據了。
在使用SCP命令執(zhí)行遠程數據傳輸時,如果在期間出現異常情況(例如主機重啟,SCP中斷)時,即使在恢復之后是無法進行端點續(xù)傳的。只有在出現網絡中斷時,在恢復之后才可以執(zhí)行斷點續(xù)傳的。
如果在異地之間傳輸巨大的文件時,出現上述異常情況,導致數據復制失敗,必須從頭傳輸,這無疑會大大降低傳輸效率。
特別對于異地傳輸來說,問題尤為明顯。利用分卷壓縮功能,可以很巧妙的比快上述問題,將重傳量降到最低。
執(zhí)行“tar zcf - /data/|split -b 200m - data.tar.gz.”命令,將指定目錄(這里為“data”目錄)下的所有文件進行分卷壓縮處理,沒和壓縮文件為200MB,分卷壓縮文件以“data.tar.gz.a”開頭。
將其存放到“tmp”目錄中。執(zhí)行“scp -l 8000 -r tmp/ root@x.x.x.x:/tmp”命令,將“tmp”目錄中的所有分卷壓縮文件傳輸到目標主機上,其中“-l”參數指定傳輸速率,這里為8MB每秒。
這樣,就可以逐個傳輸分卷壓縮包了。即使中途出現異常導致SCP命令失敗,也可以從出現問題的某個分卷包開始傳輸,而不必傳輸所有的分卷包。當傳輸完畢后,在目標主機上執(zhí)行“cat data.tar.gz.a*|tar zx”命令,執(zhí)行解壓縮操作,可以得到所有的文件。
對于體積巨大(例如上百GB等)的文件來說,使用SCP進行傳輸效能并不高。相比之下,使用bbcp這款工具,可以高效傳輸大文件,其可以點對點傳輸文件。
在兩臺主機上都需要安裝該工具,執(zhí)行“yum install wget openssl098e-y”命令,安裝所需的包。
執(zhí)行“wget http://www.slac.stanford.edu/~abh/bbcp/bin/amd64_linux26/bbcp -O /usr/bin/bbcp”命令,下載該工具,并將其安裝到“/usr/bin/bbcp”目錄下。
執(zhí) 行“chmod +x /usr/bin/bbcp”命令,為其設置可執(zhí)行權限。
例 如,執(zhí) 行“dd if=/dev/zero of=dfile bs=100M count=60”命令,創(chuàng)建名為“dfile”大 小 為6GB的 文件,執(zhí)行“bbcp dfileroot@x.x.x.x:/tmp”命令,使用bbcp將其傳輸到目標主機上。
如果以上配置了無密碼傳輸功能,則無需輸入密碼。使用bbcp的斷點傳輸功能,即使中途出錯,在下次操作時也可以從斷點處繼續(xù)傳輸,這對于大文件額傳輸是極為重要的。
執(zhí)行“bbcp -a -k dfile root@ x.x.x.x:/tmp”命令,可以實現斷點續(xù)傳功能,其中的“-k”參數表示保留所有未傳輸完成的文件,并允許在重試時進行覆蓋,“-a”參數保留checkpoint信息用于校驗文件的完整性。
執(zhí) 行“bbcp -r -P 2/etc root@ x.x.x.x:/tmp”命令,可以以遞歸方式傳輸指定目錄下的所有內容,并每隔2秒顯示傳輸的進度,便于用戶觀察復制的過程。
如果發(fā)現傳輸的文件有誤,例如,傳輸了錯誤的文件,可以強制進行刪除。例如,執(zhí) 行“bbcp -f -P 2 dfile oot@ x.x.x.x:/tmp”命令,可以強制刪除已經傳輸的文件。