网站备份要拉到本地、本地文件要传到服务器、两台 VPS 之间要搬数据——命令行下最直接的文件传输工具就是 scp。它基于 SSH 协议,天然加密、无需额外安装、一条命令搞定,是新手入门文件传输的首选。这篇文章把 scp 的常用场景、参数和报错一次讲清。
一、scp 是什么?基本语法
scp(secure copy)基于 SSH 协议复制文件,用法和 cp 几乎一样,只是目标/来源写成了远程地址:
scp 本地文件 用户@IP:远程路径 # 上传
scp 用户@IP:远程文件 本地路径 # 下载
# 上传示例:把本地 backup.zip 传到服务器 /root/ 目录
scp ./backup.zip root@8.8.8.8:/root/
# 下载示例:把服务器上的 backup.zip 拉到当前目录
scp root@8.8.8.8:/root/backup.zip ./
远程地址格式:用户名@主机IP:路径,不写路径就放对应用户的家目录。
二、常用参数速查
| 参数 | 作用 | 示例 |
|---|---|---|
-r |
递归复制整个目录 | scp -r ./site root@IP:/var/www/ |
-P |
指定 SSH 端口(大写 P) | scp -P 2222 file root@IP:/root/ |
-i |
指定私钥文件 | scp -i ~/.ssh/id_ed25519 file root@IP:/root/ |
-l |
限速,单位 Kbit/s | scp -l 1024 file root@IP:/root/(约 128KB/s) |
-C |
开启压缩(文本文件效果好) | scp -C file root@IP:/root/ |
-o |
透传 ssh 选项 | scp -o ConnectTimeout=10 file root@IP:/root/ |
# 完整示例:指定端口 + 密钥 + 目录递归 + 限速
scp -P 2222 -i ~/.ssh/id_ed25519 -r -l 2048 ./blog root@8.8.8.8:/var/www/
注意:-P 是大写(ssh 是小写 -p 指定端口),写错会报 "unknown option"。
三、实战场景
1. 网站文件整体上传
scp -r /www/wwwroot/myblog/* root@8.8.8.8:/var/www/html/
2. 备份文件下载到本地
scp root@8.8.8.8:/backup/site-20260919.tar.gz ./
3. 两台服务器之间直接搬数据(不用先下到本地再传)
scp root@A服务器IP:/backup/site.tar.gz root@B服务器IP:/backup/
4. 用密钥免密传输(配合 crontab 做定时备份)
scp -i ~/.ssh/backup_key -r /data/backup root@8.8.8.8:/backup/
四、scp 传输大文件卡住/中断怎么办?
scp 不支持断点续传,中断只能重来,这是它最大的短板。两个替代方案:
- rsync 断点续传(推荐,增量同步 + 续传):
rsync -avzP --partial ./backup.tar.gz root@8.8.8.8:/backup/
-P等于--progress --partial,显示进度且保留未完成文件;- 中断后重跑同一命令,只传没传完的部分。
- 压缩后再传:大文件先压缩减少传输量:
tar czf - ./wwwroot | ssh root@8.8.8.8 "cat > /backup/wwwroot.tar.gz"
五、常见报错与解决
Permission denied (publickey,password):用户名或密码错误,或服务器禁止密码登录;确认账号,改用密钥-i指定正确私钥;Connection refused:SSH 端口不对(服务器改了端口,加-P 端口),或防火墙/安全组没放行 22 端口;Connection timed out:网络不通或安全组拦截,检查云厂商安全组是否放行 22(或自定义端口);No such file or directory:远程路径写错,远程目录不存在,先ssh root@IP mkdir -p /目标目录;- 传输到一半中断:scp 无续传,改用 rsync(见上文);
lost connection/ 速度很慢:服务器内存不足或带宽限制,-l限速反而更稳定,或分卷传输。
六、安全建议
- 优先用密钥认证,不要用密码,防止暴力破解;
- 服务器上不要开 root 密码登录,用普通用户 +
sudo,需要时再 su; - 传输敏感数据注意目标目录权限(
chmod 700); - 大量文件建议用 rsync 而非 scp(增量 + 续传 + 保留权限)。
总结:scp 一句话——scp 本地路径 用户@IP:远程路径 上传,反过来下载,目录加 -r,改端口用大写 -P,密钥认证用 -i。传大文件怕中断就换 rsync 加 -P 参数。记住这几个用法,服务器文件传输就畅通了。




