使用 scp (Secure Copy) - 最简单直接
scp 是一个基于 SSH 协议的命令行工具,专门用于在本地主机和远程主机之间安全地复制文件,它的语法和 cp (copy) 命令非常相似,很容易上手。

基本语法
# 从本地复制到远程 scp [本地路径] [用户名@远程服务器IP:远程路径] # 从远程复制到本地 scp [用户名@远程服务器IP:远程路径] [本地路径]
详细步骤
-
打开本地终端 (在你的 Mac 或 Linux 电脑上,或者在 Windows 上使用 WSL、Git Bash、PowerShell 等)。
-
执行上传命令
示例 1:上传单个文件 假设你要将本地的
report.pdf文件上传到服务器的/home/alex/documents/目录下,服务器用户名为alex,IP 地址为168.1.100。scp ./report.pdf alex@192.168.1.100:/home/alex/documents/
./report.pdf: 本地文件路径。 表示当前目录。alex@192.168.1.100:: 远程服务器的用户名和 IP 地址,后面的冒号 是必须的,它表示路径的开始。/home/alex/documents/: 远程服务器上的目标路径。
示例 2:上传整个目录 如果你想上传一个名为
project_files的整个目录,需要使用-r(recursive) 选项。
(图片来源网络,侵删)scp -r ./project_files alex@192.168.1.100:/home/alex/documents/
-
输入密码 命令执行后,系统会提示你输入
alex用户在168.1.100服务器上的密码,输入时不会显示任何字符(光标不动),输入完成后按回车键即可开始传输。
优点
- 简单易用:语法直观,与
cp命令相似。 - 预装:大多数 Linux/macOS 系统都默认安装了
scp。 - 安全:所有传输都通过 SSH 加密。
缺点
- 每次都需要输入密码:如果需要频繁传输,这会很繁琐,解决方法请参考下面的“高级技巧”。
- 功能相对单一:只适合复制文件,没有更高级的功能。
使用 rsync - 更强大、更高效
rsync (Remote Sync) 是一个极其强大的文件同步工具,它不仅可以像 scp 一样复制文件,还可以增量同步,即只传输源文件和目标文件之间有差异的部分,这使得它在处理大文件或频繁同步时效率极高。
基本语法
# 从本地同步到远程 rsync [选项] [本地路径] [用户名@远程服务器IP:远程路径]
常用选项
-a, --archive: 归档模式,表示以递归方式传输文件,并保留所有文件属性(如权限、时间戳等),这通常是你想要的行为。-v, --verbose: 详细模式,在终端显示传输过程。-z, --compress: 在传输过程中对文件进行压缩,可以减少网络带宽的占用。--progress: 显示传输的实时进度条。
详细步骤
-
打开本地终端。
-
执行上传命令
(图片来源网络,侵删)示例 1:同步一个目录 将本地的
project_files目录同步到服务器的/home/alex/documents/,如果目标目录下已经存在一些文件,rsync只会同步新增或修改过的文件。rsync -avz --progress ./project_files alex@192.168.1.100:/home/alex/documents/
-avz: 结合了归档、详细和压缩三个最常用的选项。--progress: 可选,让你能看到酷炫的进度条。
-
输入密码 同样,系统会提示你输入远程服务器的用户密码。
优点
- 高效:增量同步,速度远快于
scp,尤其适合大文件和目录。 - 功能强大:可以排除特定文件 (
--exclude)、保持符号链接、显示进度等。 - 安全:同样通过 SSH 加密传输。
缺点
- 学习曲线稍高:选项比
scp多,初学者可能需要花点时间熟悉。 - 不是所有系统都默认安装:虽然绝大多数现代 Linux 发行版都包含它,但一些极小的系统可能没有。
使用 sftp (SSH File Transfer Protocol) - 交互式上传
sftp 是一个交互式的文件传输程序,它为你提供了一个类似 FTP 的命令行界面,但所有通信都是通过 SSH 加密的,你可以登录后,使用一系列命令来浏览、上传、下载和删除文件。
基本语法
sftp [用户名@远程服务器IP]
详细步骤
-
打开本地终端。
-
连接到服务器
sftp alex@192.168.1.100
连接成功后,你的终端提示符会变成
sftp>。 -
使用
sftp命令进行操作ls: 列出远程服务器当前目录下的文件。cd [path]: 切换远程服务器的目录。- `lcd [path]**: 切换你本地的目录。
put [local_file]: 上传一个文件到远程服务器。put -r [local_dir]: 上传一个本地目录到远程服务器。get [remote_file]: 从远程服务器下载一个文件到本地。exit或bye: 退出sftp会话。
示例会话:
# 本地终端 $ sftp alex@192.168.1.100 alex@192.168.1.100's password: # 连接成功,进入 sftp 环境 sftp> ls project_files report.pdf sftp> cd documents sftp> put ./report.pdf Uploading ./report.pdf to /home/alex/documents/report.pdf report.pdf 100% 25KB 25.0KB/s 00:00 sftp> put -r ./project_files Uploading ./project_files to /home/alex/documents/project_files sftp> exit # 回到本地终端 $
优点
- 交互式:可以方便地浏览远程文件系统,进行多种操作,无需每次都输入完整的路径。
- 安全:所有操作都通过 SSH 加密。
- 功能全面:支持上传、下载、删除、重命名等多种文件操作。
缺点
- 非自动化:不适合用在脚本中,因为它是一个交互式会话。
高级技巧:使用 SSH 密钥对实现免密登录
无论是 scp 还是 rsync,每次都输入密码很麻烦,最佳实践是配置 SSH 密钥对,实现安全的免密登录。
-
在本地电脑上生成 SSH 密钥对 (如果还没有的话)
ssh-keygen -t rsa -b 4096
一路按回车键即可,默认会在
~/.ssh/目录下生成id_rsa(私钥) 和id_rsa.pub(公钥)。 -
将公钥上传到远程服务器 使用
ssh-copy-id命令可以一键完成:ssh-copy-id alex@192.168.1.100
它会提示你输入
alex用户的密码,成功后,你的公钥~/.ssh/id_rsa.pub的内容会被追加到服务器上的~/.ssh/authorized_keys文件中。 -
验证免密登录 你可以直接
ssh登录而无需密码:ssh alex@192.168.1.100
如果成功,以后再使用
scp或rsync时,就再也不会提示你输入密码了!
总结与如何选择
| 特性 | scp |
rsync |
sftp |
|---|---|---|---|
| 易用性 | ⭐⭐⭐⭐⭐ (非常简单) | ⭐⭐⭐ (稍复杂) | ⭐⭐⭐ (交互式) |
| 效率 | ⭐⭐⭐ (每次全量传输) | ⭐⭐⭐⭐⭐ (增量同步,最高效) | ⭐⭐⭐ (类似普通文件传输) |
| 功能 | ⭐⭐ (仅复制) | ⭐⭐⭐⭐⭐ (功能强大) | ⭐⭐⭐⭐ (文件管理全面) |
| 适用场景 | 快速上传少量文件,一次性的操作。 | 强烈推荐,同步大目录、频繁备份、自动化脚本。 | 需要交互式浏览和管理远程文件时。 |
给你的建议:
- 新手或一次性上传:直接使用
scp,最简单。 - 任何正式或重复性的工作:强烈建议学习和使用
rsync,它的效率优势和丰富功能会让你受益匪浅。 - 需要浏览服务器再决定上传什么:使用
sftp的交互模式。 - 无论用哪种:都强烈建议配置 SSH 密钥对 来实现免密登录,这是现代服务器管理的标准做法。
