在企业级服务器管理和日常运维工作中,CentOS 系统因其稳定性和安全性而备受青睐,在多台服务器协同工作的环境中,文件的安全、高效传输是不可或缺的一环。scp(Secure Copy)命令正是基于 SSH 协议,为 CentOS 及其他 Linux/Unix 系统提供了一个简单而强大的文件传输解决方案,它利用 SSH 的加密机制,确保数据在传输过程中的机密性和完整性,有效防止了数据被窃听或篡改。

scp 的核心优势在于其简洁的语法和与 SSH 的无缝集成,只要两台主机之间可以通过 SSH 进行通信,就可以使用 scp 来传输文件,无需额外配置复杂的 FTP 或其他服务,下面,我们将深入探讨 scp 在 CentOS 系统中的各种用法、常用选项以及最佳实践。
scp 命令的基本语法
理解 scp 的基本语法是灵活运用的前提,其命令结构非常直观:
scp [选项] 源文件 目标地址
这个结构可以分为三个主要部分:
- [选项]:用于控制
scp行为的参数,例如指定端口、递归复制目录等。 - 源文件:指定要复制的文件或目录的路径,这个路径可以是本地路径,也可以是远程路径。
- 目标地址:指定文件要复制到的目标位置,同样,它也可以是本地或远程路径。
当指定远程路径时,其格式遵循 [用户名]@[主机名或IP地址]:[文件路径] 的模式。root@192.168.1.100:/data/backup.tar.gz 表示 IP 地址为 168.1.100 的服务器上,root 用户家目录下的 /data/backup.tar.gz 文件。
常见使用场景与实例
掌握了基本语法后,让我们通过几个典型的运维场景来具体了解 scp 的强大功能。
从本地上传文件到远程服务器
这是最常见的用法之一,例如将本地打包好的应用代码上传到生产服务器。
上传单个文件:
假设我们要将本地的 app.tar.gz 文件上传到远程服务器 168.1.101 的 /home/deploy/ 目录下,登录用户为 deploy。
scp app.tar.gz deploy@192.168.1.101:/home/deploy/
执行命令后,系统会提示输入 deploy 用户的密码,验证通过后文件即开始传输。
上传整个目录:
如果需要上传一个包含多个文件和子目录的项目文件夹,需要使用 -r(recursive,递归)选项。

scp -r /local/project_folder deploy@192.168.1.101:/home/deploy/
这个命令会将本地的 project_folder 目录及其所有内容原封不动地复制到远程服务器的指定路径下。
从远程服务器下载文件到本地
同样,我们也可以从远程服务器获取日志文件、备份数据等。
下载单个文件:
从远程服务器 168.1.100 下载 /var/log/nginx/access.log 文件到本地的当前目录。
scp root@192.168.1.100:/var/log/nginx/access.log .
这里的 代表当前目录。
下载整个目录:
使用 -r 选项下载远程的 /data/backup 目录到本地的 /local/backup/ 路径。
scp -r root@192.168.1.100:/data/backup /local/backup/
在两台远程服务器之间复制文件
scp 的一个强大功能是,可以将文件从一台远程服务器直接复制到另一台,数据流无需经过本地机器,这对于带宽受限或本地机器性能不足的场景非常有用。
将服务器 A (server_a_ip) 上的 /etc/hosts 文件直接复制到服务器 B (server_b_ip) 的 /tmp/ 目录下,操作在本地任意一台可同时访问 A 和 B 的机器上执行。
scp user_a@server_a_ip:/etc/hosts user_b@server_b_ip:/tmp/
执行时,系统会先后要求输入 user_a 和 user_b 的密码。
常用 scp 选项详解
为了满足不同的需求,scp 提供了一系列实用的选项,下表列出了一些最常用的选项:

| 选项 | 说明 |
|---|---|
-P |
指定远程主机的 SSH 端口号,注意是大写 P。 |
-p |
保留源文件的修改时间、访问时间和权限模式,注意是小写 p。 |
-r |
递归复制整个目录。 |
-C |
启用压缩,在传输过程中对数据进行压缩,可以加快传输速度,尤其适用于大文件或慢速网络。 |
-q |
静默模式,不显示传输进度条和错误信息。 |
-i |
指定用于身份验证的私钥文件,常用于基于密钥的自动化脚本。 |
-l |
限制传输带宽,单位为 Kbit/s。-l 800 表示限制带宽为 100KB/s。 |
最佳实践与技巧
- 配置 SSH 密钥认证:为了避免每次传输都手动输入密码,强烈建议配置 SSH 密钥对认证,通过
ssh-keygen生成密钥,并将公钥~/.ssh/id_rsa.pub的内容追加到远程服务器的~/.ssh/authorized_keys文件中,这不仅能提升效率,更是实现自动化运维(如定时备份脚本)的基础。 - 使用通配符:
scp支持通配符,可以方便地批量传输符合特定模式的文件。scp *.log user@host:/logs/会将当前目录下所有.log后缀的文件上传。 - 处理非标准端口:如果远程服务器 SSH 服务运行在非默认的 22 端口,必须使用
-P选项指定,scp -P 2222 file.txt user@host:/path/。
相关问答 (FAQs)
scp 和 rsync 在文件传输上有什么主要区别?我应该选择哪一个?
回答: scp 和 rsync 都是常用的文件传输工具,但它们的侧重点不同。
scp:更像一个“安全的文件复制器”,它适用于一次性、点对点的完整文件或目录传输,它的语法简单,功能纯粹,传输过程是全量复制,如果你只是想快速、安全地把一个文件从 A 点搬到 B 点,scp是一个非常直接的选择。rsync:则是一个功能更强大的“同步工具”,它的核心优势在于增量传输。rsync在同步前会比较源和目标文件的差异,只传输有变化的部分,这使得它在备份、镜像和持续同步大型目录时效率极高。rsync支持在传输中断后恢复,并且有更丰富的文件属性保留选项。
选择建议:对于简单的、偶尔的文件拷贝任务,使用 scp 即可,对于需要定期备份、同步大量数据或者网络带宽有限的场景,rsync 通常是更优、更高效的选择。
在使用 scp 传输大文件时,如何查看详细的传输进度?
回答: 默认情况下,scp 在传输文件时会显示一个简单的进度条,包含已传输大小、传输速度和剩余时间,如果你想获得更详细的信息,可以使用 -v(verbose,详细模式)选项。
scp -v large_file.iso user@remote_host:/path/
执行 -v 选项后,scp 会输出大量的调试信息,包括 SSH 连接建立、认证过程以及关于文件传输的详细统计数据,在这些信息中,你可以找到关于传输速度和已传输字节的实时更新,从而获得比默认进度条更深入的洞察,由于输出信息非常繁多,通常只在排查问题时才会使用,对于日常监控,默认的进度条通常已经足够。
通过以上介绍,相信您已经对在 CentOS 系统中使用 scp 命令有了全面而深入的了解,掌握这个基础但强大的工具,将极大地提升您在服务器管理和文件运维工作中的效率与安全性,无论是日常的代码部署,还是临时的数据交换,scp 都能胜任其职,成为您工具箱中值得信赖的一员。