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 展开,本地拼路径时先确认实际命中的文件清单,避免传错集合。