向远程主机传输文件是日常运维、开发和协作中的常见需求,随着远程工作的普及,掌握多种传输方法及其适用场景变得尤为重要,不同的传输方式在传输速度、安全性、易用性及适用文件大小等方面存在差异,选择合适的方法能显著提升工作效率,以下将从基础命令行工具到图形化界面,以及跨平台解决方案等多个维度,详细解析如何向远程主机传文件。

使用SCP(Secure Copy)命令
SCP是基于SSH协议的安全文件传输工具,通过加密连接确保数据传输安全,适合在Linux、macOS及Windows(通过WSL或PuTTY)中使用,是小文件或简单目录传输的首选。
基本语法
scp [选项] 本地文件路径 用户名@远程主机IP:远程目标路径
常用选项
| 选项 | 功能说明 |
|---|---|
-r |
递归传输目录,需搭配使用 |
-P |
指定远程主机SSH端口(默认22),注意大写P |
-p |
保留文件权限、时间戳等属性 |
-C |
启用压缩,适合传输大文件或目录 |
-v |
详细模式,排查连接问题时使用 |
示例
-
传输单个文件:将本地
/home/user/test.txt传至远程主机168.1.100的/tmp目录,远程用户为root:scp /home/user/test.txt root@192.168.1.100:/tmp
-
递归传输目录:传输本地
/home/user/docs目录至远程主机的/opt:scp -r /home/user/docs root@192.168.1.100:/opt
-
指定端口传输:若远程主机SSH端口为2222:
(图片来源网络,侵删)scp -P 2222 /home/user/file.txt user@remote.com:~/backup
注意事项
- 需确保本地与远程主机间SSH免密登录或正确输入密码/密钥。
- 传输大文件时,可通过
-C选项启用压缩,但会略微增加CPU开销。
使用SFTP(SSH File Transfer Protocol)
SFTP是基于SSH的文件传输协议,提供了类似FTP的交互式命令行界面,支持文件上传、下载、删除、重命名等操作,适合需要频繁管理远程文件的场景。
连接方式
sftp 用户名@远程主机IP
连接后进入sftp>命令行界面,常用命令如下:
| 命令 | 功能说明 |
|---|---|
put 本地文件路径 [远程路径] |
上传文件到远程主机 |
get 远程文件路径 [本地路径] |
下载远程文件到本地 |
ls [远程路径] |
列出远程目录内容 |
cd [远程路径] |
切换远程工作目录 |
mkdir 目录名 |
在远程创建目录 |
rm 文件名 |
删除远程文件 |
exit |
退出SFTP会话 |
示例
-
上传文件:将本地
report.pdf上传至远程/home/user/docs:sftp user@remote.com put /local/path/report.pdf /home/user/docs/
-
批量上传:通过
mput上传本地/data目录下所有.log文件:cd /data mput *.log
优势
- 支持断点续传(通过
-b批处理脚本实现)。 - 可交互式管理文件,适合复杂操作。
使用RSync(Remote Sync)
RSync是一款高效的文件同步工具,通过增量传输(仅同步变化部分)减少数据量,适合大文件、目录或定期同步场景,尤其在网络不稳定时表现更优。
基本语法
rsync [选项] 本地路径 用户名@远程主机:远程路径
核心选项
| 选项 | 功能说明 |
|---|---|
-a |
归档模式,保留权限、时间戳等(相当于-rlptgoD) |
-v |
显示传输过程 |
-z |
压缩传输数据 |
-h |
以人类可读格式显示进度(如1K、2M) |
--progress |
显示实时传输进度 |
--delete |
删除目标路径中本地不存在的文件(谨慎使用) |
示例
-
同步本地目录到远程:将
/home/project同步至远程/backup/project,保留属性并显示进度:rsync -avz --progress /home/project user@remote:/backup/
-
增量备份:仅同步变化文件,避免重复传输:
rsync -az --delete /local/data/ remote:/backup/data/
适用场景
- 定期备份或数据同步。
- 传输大文件或大量小文件时,效率显著高于SCP。
通过SSH隧道与端口转发
若远程主机未开放文件传输服务,可通过SSH隧道将本地端口映射到远程,再结合本地工具(如FTP/SFTP)传输文件。
示例:将本地端口2222映射到远程SFTP端口22
ssh -L 2222:localhost:22 user@remote.com
映射后,本地可通过SFTP连接localhost:2222,实际数据通过SSH隧道加密传输至远程主机。
图形化工具传输
对于不熟悉命令行的用户,图形化工具更直观易用,支持拖拽操作,常见工具有:
FileZilla(跨平台)
- 支持FTP、SFTP、FTPES等协议,界面简洁。
- 使用步骤:
- 安装FileZilla,输入远程主机IP、用户名、密码及端口(默认SFTP端口22)。
- 连接后,左侧为本地文件,右侧为远程文件,直接拖拽即可传输。
WinSCP(Windows)
- 专为Windows设计,支持SCP、SFTP、WebDAV等协议,可与文本编辑器集成。
- 特色功能:支持同步文件夹、批量重命名、脚本自动化等。
Cyberduck(macOS/Windows)
- 开源免费,支持云存储(如AWS S3、Azure Blob)和服务器协议,界面现代化。
企业级解决方案:FTP/SFTP服务器
若需搭建文件共享服务,可在远程主机部署SFTP服务器(基于SSH,更安全)或FTP服务器(如vsftpd)。
以vsftpd(Linux)为例:
- 安装:
sudo apt install vsftpd(Ubuntu/Debian)或sudo yum install vsftpd(CentOS)。 - 配置:编辑
/etc/vsftpd.conf,启用write_enable=YES,设置用户目录(chroot_local_user=YES)。 - 启动服务:
sudo systemctl start vsftpd,并设置开机自启。 - 客户端通过FileZilla等工具连接,使用FTP(端口21)或SFTP(端口22)传输文件。
跨平台与自动化脚本
对于重复性传输任务,可通过编写脚本实现自动化,使用expect处理SCP密码交互,或结合Python的paramiko库:
import paramiko
# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接远程主机
ssh.connect(hostname='remote.com', username='user', password='pass')
# 通过SFTP传输文件
sftp = ssh.open_sftp()
sftp.put('/local/file.txt', '/remote/file.txt')
sftp.close()
ssh.close()
相关问答FAQs
Q1:传输大文件时,SCP或RSync哪个更高效?为什么?
A:RSync更高效,因为RSync通过“增量同步”机制,仅传输文件变化的部分(如修改的块或新增内容),而SCP会重新传输整个文件,即使只有少量改动,RSync支持压缩(-z选项)和断点续传,适合网络不稳定或大文件场景,尤其当文件大小超过100MB时,效率优势明显。
Q2:如何通过SFTP实现断点续传?
A:SFTP本身支持断点续传,具体操作分为两种情况:
- 客户端工具:如FileZilla或WinSCP,传输中断后重新连接,右键点击未完成文件,选择“恢复传输”或类似选项。
- 命令行SFTP:使用
reput命令恢复上传(reput 本地文件 远程文件),或reget恢复下载(reget 远程文件 本地文件),需注意,断点续传要求本地与远程文件部分内容已存在,且文件未被修改或覆盖。
