介紹如何在 Linux 中使用 scp
指令透過 SSH 安全加密連線來傳輸檔案。
若要將本地端的 myfile.txt
檔案傳輸至 myuser@192.168.0.1
的 /data/
目錄中,可以執行:
# 將本地端 myfile.txt 傳輸至 myuser@192.168.0.1 的 /data/ 目錄
scp myfile.txt myuser@192.168.0.1:/data/
這樣 scp
就會以 myuser
帳號登入 192.168.0.1
主機之後,將 myfile.txt
檔案放置在該主機上的 /data/
目錄中。
若要將遠端的檔案傳輸至本地端,語法都類似,例如以 myuser
帳號登入 192.168.0.1
主機之後,將 /data/myfile.txt
檔案複製到本地端目前的目錄下,可以執行:
# 將 myuser@192.168.0.1 中的 /data/myfile.txt 檔案複製到本地端目前目錄
scp myuser@192.168.0.1:/data/myfile.txt .
若要將整個目錄下的所有子目錄與檔案都一起複製,可以加上 -r
參數:
# 複製 myfolder 目錄至 myuser@192.168.0.1 的 /data/ 目錄 scp -r myfolder myuser@192.168.0.1:/data/ # 將 myuser@192.168.0.1 中的 /data/myfolder 目錄複製到本地端目前目錄 scp -r myuser@192.168.0.1:/data/myfolder .
若要讓檔案在複製之後,可以保留檔案的變更、存取時間與檔案權限,可以加上 -p
參數:
# 保留檔案變更、存取時間與權限 scp -p myfile.txt myuser@192.168.0.1:/data/
若在低頻寬的網路環境,可以加上 -C
參數,讓資料以 gzip 壓縮之後再進行傳輸:
# 以 gzip 壓縮之後再進行傳輸 scp -C myfile.txt myuser@192.168.0.1:/data/
若要限制資料傳輸速度,可以使用 -l
指定傳輸速度的上限值,單位為(Kbit/s):
# 限制資料傳輸速度為 500 Kbit/s scp -l 500 myfile.txt myuser@192.168.0.1:/data/
SSH 服務的標準連接埠號為 22
,但因為安全性的考量,管理者可能會把非公開的 SSH 服務開在其他的連接埠,這時候在使用 scp
傳輸資料時,就可以使用 -P
指定連接埠號:
# 指定 SSH 服務連接埠為 8022 scp -P 8022 myfile.txt myuser@192.168.0.1:/data/
scp
也可以使用公開金鑰認證的方式登入遠端主機,省去打密碼的麻煩,若要指定私鑰則可使用 -i
參數:
# 指定私鑰檔案,以公開金鑰認證的方式登入遠端主機 scp -i my_id_dsa myfile.txt myuser@192.168.0.1:/data/