首页/系统/Linux 运维命令速查/scp 远程复制文件
网络命令82 条

scp 远程复制文件

基于 SSH 的文件传输:-r 传目录、-P 端口、-i 密钥、-C 压缩;两台服务器之间搬文件最常用的一条命令。

Linux 运维命令速查系统更新于 2026-10-13

scp 是什么

scp 基于 SSH 传输文件,是两台机器之间搬东西最省事的一条命令。它支持目录(-r)、非默认端口(大写 -P)、指定密钥(-i)与传输中压缩(-C)。局限也很明确:没有断点续传能力,中断就得从头再来;面对大量小文件或需要增量同步的场景,rsync 才是更合适的选择。

基本信息

适用平台Linux、macOS、Windows(OpenSSH 自带)
命令语法scp [-r] [-P 端口] [-i 密钥] 源 目标
常用选项-r 递归目录 / -P 端口(大写)/ -i 私钥 / -C 传输压缩 / -p 保留时间与权限 / -l 限速
易错点ssh 的端口选项是小写 -p,scp 是大写 -P

典型使用场景

  • 单文件快速搬运:把安装包或备份推到目标机
  • 拉取远端文件:把日志拉回本地分析
  • 传整个目录:加 -r 递归复制
  • 指定密钥与端口:非默认端口或使用专用密钥时
  • 限速传输:在带宽紧张的生产环境用 -l 控制速率

常用示例

常用示例
scp backup.tar.gz ops@10.0.0.5:/data/backup/
scp -r deploy/ ops@10.0.0.5:/var/www/app/
scp -P 2222 -i ~/.ssh/id_ed25519 file db@10.0.0.9:/tmp/
scp ops@10.0.0.5:/var/log/app.log ./logs/       # 反向拉取
scp -C big.sql.gz ops@10.0.0.9:/tmp/            # 传输中压缩
scp -l 8000 big.iso ops@10.0.0.9:/tmp/          # 限速到约 8 Mbit/s
scp -p -r data/ ops@10.0.0.9:/data/             # 保留时间戳与权限

常用选项

选项作用提示
-r递归复制目录传目录必须加
-P 端口指定 SSH 端口大写,与 ssh 的小写 -p 不同
-i 密钥指定私钥文件私钥权限要求 600
-C传输中压缩文本文件收益明显,已压缩文件无效
-p保留修改时间与权限与 -P 大小写含义完全不同
-l 速率限制带宽,单位 Kbit/s生产环境控制影响面
大目录或容易中断的传输换用 rsync:scp 没有续传能力,几百 GB 传到一半断线只能从头再来。
目标路径含空格要加引号;通配符在本地 shell 与远端展开的时机不同,想让远端展开就得转义,否则会被本地 shell 提前处理掉。传输前在目标机用 ls 与 df 确认落点存在、空间够用,比传完再补救省时间。
传输走的是 SSH 通道,认证方式、端口与主机别名完全复用 ssh 的配置,团队里统一维护一份主机别名能省掉大量重复参数。路径里的通配符由哪一端解释要分清:通常由远端 shell 展开,本地拼路径时先确认实际命中的文件清单,避免传错集合。

易错点

  • -P 是端口且必须大写,把 ssh 的小写 -p 习惯带过来会报错或行为不符预期
  • scp 没有断点续传,大文件建议改用 rsync 的续传选项
  • 目标目录不存在时 scp 会把它当成目标文件名,等于悄悄改了落点,传前确认目录存在
  • 一次传大量小文件效率很低,先打包再传更划算
  • 对已压缩文件加 -C 不省带宽反而多耗 CPU,判断类型后再决定
  • 直接覆盖远端正在使用的文件:传输过程中目标文件处于不完整状态,服务可能读到半截内容,应先传到临时文件名再改名替换

数据来源与参考

  • man 1 scp(OpenSSH 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌