SSH(Secure Shell)是一种网络协议,用于加密方式远程登录和管理服务器,同时也支持安全的文件传输,通过SSH下载文件,常用的方法包括scp(secure copy)、sftp(SSH File Transfer Protocol)以及结合rsync等工具,以下是详细的命令介绍和使用场景分析,帮助用户高效、安全地完成文件下载任务。

使用scp命令下载文件
scp是基于SSH的文件复制工具,适用于本地与远程服务器之间的单向文件传输,其基本语法为:
scp [选项] [用户@远程主机]:[远程文件路径] [本地目标路径]
常用选项及示例:
-
基础下载
从远程服务器下载单个文件到当前目录:scp user@remote:/path/to/file.txt .
从远程服务器下载文件到指定本地路径:
scp user@remote:/path/to/file.txt /local/path/
-
下载整个目录
需添加-r选项递归复制目录:
(图片来源网络,侵删)scp -r user@remote:/path/to/directory /local/path/
-
指定端口
若SSH服务非默认22端口,需用-P(大写)指定:scp -P 2222 user@remote:/path/to/file.txt .
-
限制带宽
通过-l选项限制传输速率(单位:Kbit/s):scp -l 1024 user@remote:/path/to/file.txt .
-
压缩传输
添加-C选项启用压缩,适合大文件或低带宽环境:scp -C user@remote:/path/to/large_file.zip .
注意事项:
- 需提前配置SSH免密登录或手动输入密码,否则传输会中断。
- 若远程文件路径包含空格或特殊字符,需用引号包裹,如
scp 'user@remote:/path/to/my file.txt' .。
使用sftp交互式下载
sftp是SSH的文件传输协议,提供类似FTP的交互式命令行界面,适合批量操作或复杂路径管理,启动方式为:

sftp [用户@远程主机]
常用命令及示例:
-
连接后操作
- 登录后进入远程目录:
cd /path/to/remote - 下载文件到本地:
get file.txt - 下载整个目录:
get -r directory - 指定本地路径下载:
get file.txt /local/path/ - 退出:
exit或bye
- 登录后进入远程目录:
-
批量下载
结合通配符下载多个文件:mget *.txt
-
显示进度
使用-b选项通过批处理脚本实现进度显示:sftp -b batch_script.txt user@remote
其中
batch_script.txt内容为:cd /remote/path get file.txt exit
优势:
- 支持断点续传(通过
get -r或reget命令)。 - 可交互式查看远程文件系统结构,避免路径错误。
结合rsync增量下载
rsync通过SSH协议实现增量同步,适合大文件或频繁更新的场景,仅传输变化部分,节省带宽,语法为:
rsync [选项] [用户@远程主机]:[远程路径] [本地路径]
常用选项及示例:
-
基础同步
rsync -avz user@remote:/path/to/remote_dir /local/path/
-a:归档模式,保留权限、时间戳等属性。-v:显示详细过程。-z:压缩传输数据。
-
删除本地多余文件
若需使本地目录与远程完全一致(包括删除本地已不存在的文件):rsync -avz --delete user@remote:/path/to/remote_dir /local/path/
-
排除特定文件
通过--exclude选项跳过文件或目录:rsync -avz --exclude='*.log' user@remote:/path/to/remote_dir /local/path/
适用场景:
- 定时备份或同步远程服务器数据。
- 仅传输新增或修改的文件,大幅提升效率。
不同工具对比
| 工具 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
scp |
简单易用,适合单次文件传输 | 不支持断点续传,无交互界面 | 少量文件、快速下载 |
sftp |
支持交互操作、断点续传 | 需手动输入命令,效率较低 | 批量操作、复杂路径管理 |
rsync |
增量传输,高效同步 | 参数复杂,学习成本较高 | 大文件、频繁更新的数据备份 |
常见问题与解决
-
权限不足导致下载失败
原因:远程文件权限不足或本地目标路径无写入权限。
解决:检查远程文件权限(ls -l),或使用sudo下载到本地有权限的目录。 -
传输中断后如何续传
方法:scp:不支持原生续传,需重新传输或改用rsync。sftp:使用reget file.txt命令续传。rsync:直接重新运行命令,自动识别已传输部分。
相关问答FAQs
Q1: 如何通过SSH下载远程服务器的整个文件夹,同时排除其中某个子目录?
A: 使用rsync命令的--exclude选项,例如排除logs子目录:
rsync -avz --exclude='logs' user@remote:/path/to/remote_dir /local/path/
若需排除多个目录,可多次使用--exclude,或通过--exclude-from=/path/to/exclude_list.txt指定排除规则文件。
Q2: 在下载大文件时,如何监控scp或rsync的传输进度?
A:
scp:本身不显示进度,可通过pv工具包装:ssh user@remote "cat /path/to/large_file.zip" | pv > /local/path/large_file.zip
rsync:添加--progress选项实时显示传输进度:rsync -avz --progress user@remote:/path/to/large_file.zip /local/path/
