scp — 透過 SSH 安全複製檔案
透過 SSH 加密連線在主機間複製檔案或目錄。
語法
scp [選項] 來源 目的地
常用選項
| 選項 | 說明 | 範例 |
|---|---|---|
-r |
遞迴複製目錄 | scp -r dir/ user@host:/path/ |
-P port |
指定 SSH 埠號(大寫 P) | scp -P 2222 file user@host:/path/ |
-i 金鑰 |
指定 SSH 私鑰 | scp -i ~/.ssh/id_rsa file user@host:/ |
-C |
啟用壓縮傳輸 | scp -C large.log user@host:/ |
-p |
保留原始檔案的時間戳記和權限 | scp -p file user@host:/ |
-q |
靜默模式,不顯示進度 | scp -q file user@host:/ |
-v |
詳細模式,顯示偵錯資訊 | scp -v file user@host:/ |
使用範例
範例 1:上傳本機檔案到遠端
將本機的 report.pdf 複製到遠端主機的 /home/user/ 目錄。
$ scp report.pdf user@192.168.1.100:/home/user/
report.pdf 100% 2MB 5.2MB/s 00:00
範例 2:從遠端下載檔案
從遠端主機下載 access.log 到本機當前目錄。
$ scp user@server.example.com:/var/log/access.log .
access.log 100% 50MB 8.1MB/s 00:06
範例 3:遞迴複製目錄
使用 -r 複製整個目錄(含所有子目錄和檔案)到遠端。
$ scp -r ./project/ user@server:/var/www/
範例 4:指定 SSH 埠號
若 SSH 使用非標準埠號(如 2222),用大寫 -P 指定。
$ scp -P 2222 config.yml user@server:/etc/app/
常見錯誤與排錯
scp: warning: Sending subsystem request failed on channel 0
- 原因
- 遠端伺服器的 OpenSSH 較新版本已停用舊版 scp 協定。
- 解法
- 改用 rsync -avz -e ssh 或 sftp 指令傳輸,或降級用 scp -O 選項。
Permission denied (publickey)
- 原因
- SSH 金鑰驗證失敗,與 ssh 指令相同的問題。
- 解法
- 確認 SSH 金鑰設定正確,或使用 -i 指定正確的私鑰。