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 指定正確的私鑰。

延伸閱讀