在Linux系统管理与运维工作中,安全高效地传输文件是一项核心技能。SCP(Secure Copy Protocol)作为基于SSH协议的内置文件传输工具,以其加密传输、配置灵活的特性,成为系统管理员和开发者在服务器间同步数据的首选方案。它不仅支持端口自定义、密钥认证、目录递归复制,还能进行带宽限制,功能全面且可靠。本文将深入解析SCP命令的详细使用方法,帮助你掌握远程文件拷贝的各类实战技巧。

一、SCP命令基本语法与传输方向
SCP命令的核心在于通过路径格式区分本地与远程位置,从而确定文件传输方向。本地路径为常规文件路径,远程路径则需遵循“用户名@主机地址:远程路径”的标准格式,末尾的冒号至关重要。文件是从本地推送到远程,还是从远程拉取到本地,完全由源路径和目标路径的写法决定。
1. 本地文件上传到远程服务器
将本地文件安全拷贝至远程主机指定目录:scp /path/to/local/file user@remote_host:/path/to/remote/directory/
2. 从远程服务器下载文件到本地
从远程主机获取文件并保存至本地目录:scp user@remote_host:/path/to/remote/file /path/to/local/directory/
3. 在远程服务器间中转传输文件
通过本地终端作为中转站,实现两台远程主机之间的文件拷贝:scp user1@host1:/file user2@host2:/destination/
二、指定SSH端口与使用密钥认证
为提高安全性,许多服务器会将SSH服务端口修改为非标准的22端口。此时,SCP命令需使用-P选项(大写P)明确指定端口号,且该选项需置于源路径之前。对于配置了密钥登录的服务器,则可结合-i选项指定私钥文件。
1. 向非标准端口服务器上传文件
假设目标服务器SSH端口为2222:scp -P 2222 file.txt user@192.168.1.100:/home/user/
2. 从特定端口下载文件并重命名
从指定端口拉取文件,并在本地保存时更改文件名:scp -P 2222 user@192.168.1.100:/var/log/syslog ./syslog_backup.log
3. 使用自定义密钥文件进行认证传输
通过指定密钥文件连接服务器并传输配置文件:scp -i ~/.ssh/id_rsa_custom -P 2222 config.conf user@192.168.1.100:/etc/
三、递归复制目录及子目录内容
SCP默认仅传输单个文件。如需完整拷贝整个目录及其内部所有子文件夹与文件,必须使用-r(递归)选项,否则会提示“not a regular file”错误。需注意目录路径末尾的斜杠会影响目标位置的存放结构。
1. 上传完整项目目录到服务器
递归上传本地项目文件夹至远程部署目录:scp -r ./my_project/ user@server.example.com:/opt/deploy/
2. 下载远程服务器配置目录进行备份
完整备份远程Nginx配置目录,保持原有层级结构:scp -r user@10.0.0.5:/etc/nginx/ ./backup_nginx/
3. 通过本地中转实现跨服务器目录迁移
将主机A的应用程序日志目录迁移至主机B的归档路径:scp -r user1@hostA:/var/log/app/ user2@hostB:/var/log/app_archive/
四、限制传输带宽与静默执行模式
传输大型文件时,为避免占满网络带宽影响其他服务,可使用-l选项(小写L)进行限速,单位为Kbit/s。此外,通过-q(安静)选项可关闭进度显示与提示信息,适用于自动化脚本中的静默传输场景。
1. 限速上传大型镜像文件
以不超过500 Kbit/s的速度上传系统ISO镜像:scp -l 500 ubuntu-22.04.iso user@192.168.1.200:/tmp/
2. 静默模式限速下载备份文件
无提示地以1 Mbit/s速度从备份服务器下载压缩包:scp -q -l 1000 user@backup.internal:/backup/data.tar.gz ./
3. 多参数组合实战:端口、密钥、限速与静默
综合使用多个选项完成安全、可控的文件传输:scp -q -P 2222 -i /keys/admin.key -l 2000 archive.zip user@172.16.0.10:/mnt/external/
五、文件过滤与避免覆盖的实用技巧
SCP命令本身未内置文件排除功能,但可借助Shell通配符实现基础过滤。默认情况下,SCP会直接覆盖目标路径同名文件。若需避免意外覆盖,可先通过SSH命令检测远程文件是否存在。对于更复杂的排除需求,推荐使用rsync工具,它兼容SCP语法且提供强大的过滤规则。
1. 仅传输特定扩展名的文件
使用通配符只上传当前目录下所有JPG图片文件:scp *.jpg user@192.168.1.100:/var/www/images/
2. 安全传输:避免覆盖远程已有文件
通过条件判断,仅在远程文件不存在时才执行拷贝操作:ssh user@192.168.1.100 'test ! -f /home/user/file.dat' && scp file.dat user@192.168.1.100:/home/user/
3. 使用rsync实现高级排除与同步
利用rsync排除所有临时文件,并通过指定端口进行同步备份:rsync -a vz --exclude='*.tmp' --rsh='ssh -p 2222' ./data/ user@192.168.1.100:/backup/
