scp 命令详解与实战:Linux 服务器文件上传下载、目录递归与断点续传


网站备份要拉到本地、本地文件要传到服务器、两台 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 不支持断点续传,中断只能重来,这是它最大的短板。两个替代方案:

  1. rsync 断点续传(推荐,增量同步 + 续传):
rsync -avzP --partial ./backup.tar.gz root@8.8.8.8:/backup/
  • -P 等于 --progress --partial,显示进度且保留未完成文件;
  • 中断后重跑同一命令,只传没传完的部分。
  1. 压缩后再传:大文件先压缩减少传输量:
tar czf - ./wwwroot | ssh root@8.8.8.8 "cat > /backup/wwwroot.tar.gz"

五、常见报错与解决

  1. Permission denied (publickey,password):用户名或密码错误,或服务器禁止密码登录;确认账号,改用密钥 -i 指定正确私钥;
  2. Connection refused:SSH 端口不对(服务器改了端口,加 -P 端口),或防火墙/安全组没放行 22 端口;
  3. Connection timed out:网络不通或安全组拦截,检查云厂商安全组是否放行 22(或自定义端口);
  4. No such file or directory:远程路径写错,远程目录不存在,先 ssh root@IP mkdir -p /目标目录;
  5. 传输到一半中断:scp 无续传,改用 rsync(见上文);
  6. lost connection / 速度很慢:服务器内存不足或带宽限制,-l 限速反而更稳定,或分卷传输。

六、安全建议

  • 优先用密钥认证,不要用密码,防止暴力破解;
  • 服务器上不要开 root 密码登录,用普通用户 + sudo,需要时再 su;
  • 传输敏感数据注意目标目录权限(chmod 700);
  • 大量文件建议用 rsync 而非 scp(增量 + 续传 + 保留权限)。

总结:scp 一句话——scp 本地路径 用户@IP:远程路径 上传,反过来下载,目录加 -r,改端口用大写 -P,密钥认证用 -i。传大文件怕中断就换 rsync 加 -P 参数。记住这几个用法,服务器文件传输就畅通了。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Linux 软件包管理详解:apt、yum、dnf 安装/卸载/升级与软件源配置实战

Linux 查看系统信息完整指南:uname、lscpu、free、df 与硬件体检命令实战

评 论
更换验证码