1. 为什么选FileZilla做跨系统文件互传
做Linux和Windows双系统的小伙伴,十有八九都会遇到一个尴尬场景:Windows 11下随手存的资料、代码包、安装程序,到Ubuntu 20.04里却没带过来。用U盘拷吧,来回插拔确实麻烦,大文件还容易中途报错;用网盘中转吧,上传下载速度受带宽限制,隐私文件放上去心里也不踏实。
这时候最顺手的方案就是搭建一个本地的FTP/SFTP传输通道,而FileZilla是绕不开的老牌工具。它分为客户端和服务端两部分,我们这次用到的组合是:Windows 11上装FileZilla Client,Ubuntu 20.04上通过SSH/SFTP服务来配合,这样不需要额外装FTP服务端,因为Ubuntu本身自带了OpenSSH,SFTP就顺带解决了。而且用SFTP走的是SSH加密通道,比传统FTP更安全,账号密码也是走系统用户验证,配置起来省事。
我实际测试下来,局域网内传输一个1GB左右的视频文件,速度和共享文件夹差不多,而且胜在稳定,不会出现拷到一半Windows突然弹“文件被占用”。对经常在两套系统间同步代码、传安装包、备份配置文件的开发者来说,FileZilla算是性价比最高的选择。
本篇内容适合这些读者:刚装好Ubuntu 20.04双系统、想摆脱U盘的Linux新手;需要在Windows与Linux之间高频互传文件的办公用户;以及想深入了解SFTP配置细节的运维爱好者。下面我把整个流程拆开讲透。
2. 环境准备与前置条件
2.1 Ubuntu 20.04 和 Windows 11 的网络互通
做文件互传,先得保证两台系统能互相访问。大多数人是双硬盘或单硬盘双系统,同一台电脑上Windows和Ubuntu是交替启动的,不存在同时运行的问题。这种情况其实很简单——因为宿主机只有一个,网络是同一个,不需要考虑跨设备。
但如果你用的是两台物理机,或者用虚拟机跑Ubuntu,那就得确认网络互通。常规做法是让两台机器处于同一个局域网,比如连同一个路由器或交换机。Ubuntu 20.04默认走DHCP获取IP,Windows 11也是一样,只要插上网线或连上WiFi,一般就能互通。
我建议在开始之前,先在终端里确认一下Ubuntu的IP地址,因为后面的SFTP连接要用到。用下面命令查看:
ip addr show | grep inet或者更直观一点:
hostname -I输出结果通常长这样:
192.168.1.100记下这个IP,Windows 11那边连的时候要填它。Windows 11的IP怎么查?在“设置 > 网络和Internet > WLAN/以太网”里看,或者在命令行敲ipconfig也行。
注意:如果是虚拟机,需要把网络模式设置为“桥接模式”,别用NAT。桥接模式下,Ubuntu会直接拿局域网IP,这样Windows才能反向访问到它。NAT模式下,虚拟机是藏在宿主后面的,外面不好直接连。
2.2 Ubuntu 20.04 安装并启用 SSH 服务
既然要用SFTP,Ubuntu这边就得开着SSH服务。好在20.04默认安装了openssh-client,但服务端一般没装,需要手动装一下。
打开终端,执行:
sudo apt update sudo apt install openssh-server -y安装完成后,查看SSH服务状态:
sudo systemctl status ssh正常情况下,你会看到类似这样的输出:
● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running)只要Active显示是running,就说明服务已经跑起来了。如果没跑起来,手动启动一下:
sudo systemctl start ssh顺便设置成开机自启:
sudo systemctl enable ssh这一步做完,Ubuntu这边等于开了一个对外开放的22号端口,等待SFTP连接。
2.3 Windows 11 安装 FileZilla Client
Windows 11这边我们去官网下载FileZilla Client。打开浏览器,访问FileZilla官方下载页面,选择Windows版本,下载安装包。安装过程一路Next就行,注意如果杀毒软件有拦截,加白名单即可。
装好之后打开,界面分五个区域:最上面是快速连接栏,中间是站点管理器和传输状态,下面左右两个大窗格,左侧是本地目录,右侧是远程目录,最底下是传输队列和日志窗口。
为什么不用别的方式?比如Windows自带的SMB共享、或者Ubuntu里的Samba?说实话Samba配置比SSH复杂多了,要设用户、设密码、设共享目录,Windows访问还要处理权限问题。而SFTP从Ubuntu端来看,零配置文件,直接用系统用户和密码登录,天然就是干净的Linux权限体系,NTFS和ext4之间的格式坑也完全绕开了。
3. 核心配置:Ubuntu端用户权限与目录规划
3.1 用哪个账号登录
SFTP登录用的是Ubuntu的系统账号。最简单直接的方式就是用你平时登录Ubuntu桌面时的那个用户名和密码。这样登录后,默认就会回到你的home目录,也就是/home/用户名。
如果Ubuntu上设置了自动登录,建议手动设置一下,确保密码是已知的:
passwd输入旧密码和新密码,确保Windows这边能用一个确定的密码去连。如果账号密码里有特殊字符,比如@、#,连接时要注意URL编码的问题,建议密码只用字母数字加简单符号,别自找麻烦。
3.2 传输目录的权限心得
默认SFTP登录后看的目录就是用户主目录/home/用户名。里面默认包含下载(Downloads)、文档(Documents)、桌面(Desktop)这些中文目录,Windows的FileZilla左侧看得到,右侧也能看到这些目录。
不过要注意:FileZilla列出的中文目录在Windows客户端的编码设置不对时,可能会显示成乱码。所以我的习惯是提前建一个纯英文目录专门用来做互传:
mkdir -p ~/share chmod 755 ~/share这样Windows那边连上来,一眼就能看到share文件夹,传输文件就往里面扔,路径简洁,编码也好处理。权限755表示所有用户可读可执行,只有owner能写,对传公共文件来说是够用的。
3.3 防火墙放通 SSH 端口
Ubuntu 20.04默认防火墙ufw通常是关闭的,但如果你或者某些软件把ufw开启过,那就得放行22端口:
sudo ufw allow ssh sudo ufw enable如果你用端口转发或者改过SSH端口,那就把22换成实际端口。这里提醒:不同系统默认状态不一样,我遇到过某些云镜像自带ufw开启的情况,所以这个步骤还是查一下更稳。
查看ufw状态:
sudo ufw status如果显示Status: inactive,就不用操心。如果是active,就放行。
4. FileZilla 连接操作的完整步骤
4.1 快速连接方式
这一节演示最常用的快速连接。打开FileZilla Client,在顶部快速连接栏里这样填:
- 主机:Ubuntu的IP,比如192.168.1.100
- 用户名:你的Ubuntu账号名
- 密码:账号密码
- 端口:默认22,不用改
然后点击“快速连接”。第一次连接会弹出提示,询问是否信任该主机,勾选“始终信任该主机”,确定即可。
连接成功后,FileZilla右侧窗格会显示远程目录列表,左侧窗格是本地Windows目录。日志窗口会显示“Directory listing successful”之类的信息。
4.2 站点管理器方式(适合固定使用)
如果这台服务器你经常连,保存配置更方便。点击菜单“文件 > 站点管理器”,或者按Ctrl+S。
在站点管理器中点击“新站点”,给它取个名,比如“我的Ubuntu”。然后填写:
- 协议:选择SFTP - SSH File Transfer Protocol
- 主机:IP地址
- 端口:22
- 登录类型:正常
- 用户:用户名
- 密码:密码
切到“传输设置”选项卡,把传输模式选为“主动”或“被动”都可以。对于SFTP来说,主动和被动区别不大,如果某个模式有问题换另一个即可。
保存后,每次打开FileZilla直接点站点记录就能连上,不用再输密码。
4.3 文件上传与下载的细节
连接成功后,从Windows向Ubuntu传文件,就是选中右侧窗格某个目录,然后把左侧窗格的本地文件拖到右侧窗格。反之,从Ubuntu往Windows传,把右侧窗格的文件拖到左侧窗格。
这里有几个我踩过的细节坑:
- 拖拽文件的时候注意看鼠标提示,FileZilla默认鼠标拖拽是“上传/下载”动作,但如果你按住Shift再拖,就变成移动(相当于mv),而按住Ctrl拖是复制(相当于cp)。传输和移动在实际效果上差别很大,可以试一次看看,通常我们要的是“复制/传输”,不是“移动”。
- 传大量小文件时,FileZilla默认并发传输6个文件,可以在“设置 > 传输 > 并发传输”里提高这个数值。比如传一个包含几千个小图片的目录,默认6并发比较慢,调到20左右会快不少。
- 大文件传一半经常断,这个是FileZilla的老问题了。遇到这种情况,在“设置 > 传输”里勾选“如果文件已存在,则覆盖”,同时开启“保留时间戳”,这样断点续传才有意义。FileZilla其实是有断点续传能力的,但必须在连接没断开的情况下重新传输同名文件,它会自动判断大小,接着传。
4.4 命令行小技巧:能用 sftp 就不开图形界面
FileZilla虽然好用,但偶尔我也会直接用Ubuntu终端里的sftp命令测试连接:
sftp 用户名@192.168.1.100如果命令行能传输,说明服务端没问题;如果命令行也不行,那问题多半出在SSH服务或者网络层。这个排错思路后面排查问题会用到。
5. 实操中常见的三大问题与排查诀窍
5.1 连接超时或拒绝连接
Windows 11的FileZilla提示“连接超时”或者“连接被拒绝”,这是最典型的问题。按照由内到外的顺序排查:
- 先ping Ubuntu的IP,看通不通:
ping 192.168.1.100在Windows cmd里执行。能通就说明网络层没问题。
- 再检查SSH服务是否运行:
sudo systemctl status ssh看不到running就启动。
- 然后检查22端口是否监听:
sudo netstat -tlnp | grep 22或者用ss命令:
ss -tlnp | grep 22如果看到类似:
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))就说明SSH在正常监听。
如果上面都正常,那就是防火墙拦截,按2.3放行ufw。
还有一个容易被忽略的地方:Windows 11自带防火墙首次运行FileZilla时,会弹窗询问是否允许公网访问,有时候因为手滑点了“取消”,导致连接出去流量被拦截。去“防火墙设置 > 允许应用通过防火墙”里找到FileZilla,勾选专用和公用。
5.2 中文目录名乱码
用FileZilla连接Ubuntu后,右侧窗格的中文目录名显示成乱码,比如“下载”显示成“涓嬭浇”,这是因为FileZilla默认使用UTF-8编码,但服务器的locale设置不一致。
解法有两种:
一是改服务器端环境变量,让SSH会话默认使用UTF-8。编辑/etc/ssh/sshd_config,确认没有注释掉SendEnv LANG LC_*这一行。然后重启ssh。不过有时依然改不彻底。
二是直接在FileZilla里设置强制UTF-8。打开站点管理器,选中你的站点,点击“字符集”选项卡,选择“强制UTF-8”。改完重新连接,乱码就没了。但这个选项只在服务器端支持时有用,对OpenSSH来说肯定支持,所以这个方案更靠谱。
我自己的做法是尽量不用中文目录,直接建英文share目录,彻底避开这一层编码烦恼。
5.3 权限拒绝:无法上传文件
Windows拖文件到Ubuntu,提示“Permission denied”。这个大概率是目标目录的写权限问题。Ubuntu的home目录默认只有owner有写权限,如果你登录的用户是当前账号,那肯定能写。但如果你用别的账号登录,或者目标目录属于root,那就写不进去。
检查目录权限:
ls -ld 目录路径如果需要修改,可以把自己加入某个组,或者直接改目录owner:
sudo chown 用户名:用户名 目录路径也可以在FileZilla里右键目标目录,选择“修改属性”,直接改权限。但要注意,权限改太大有可能影响系统安全,别把整个home目录设成777。
说起这个,我有个实战体会:日常传文件,就固定用一个非root账号操作,遇到权限不够就chown到该账号名下。千万别为了省事直接开root登录。有些不熟练的读者会用root账号去连SFTP,虽然Ubuntu默认禁止root远程SSH,但如果你改了配置允许root登录,一旦密码泄露,整个系统就裸奔了。这里还是强调一下安全底线。
6. 进阶玩法:用 FileZilla 同步与备份
6.1 同步目录操作
FileZilla有“同步浏览”和“目录比较”功能。在“视图”菜单中勾选“同步浏览”,这样你切换左侧目录时,右侧也会自动切到对应目录,适合对齐项目文件夹。
更实用的是“目录比较”。选中本地和远程同一目录,点击工具栏上的“比较目录”按钮,FileZilla会用不同颜色标出哪些文件是本地有、远程没有,哪些是远程有、本地没有,哪些大小不同。这样你能快速判断哪些需要同步,然后手动拖拽传输,比开两个资源管理器一个个看效率高多了。
6.2 队列计划传输
FileZilla支持把待传文件加入队列,还可以在“文件 > 传输队列”里查看。不过它自带的定时功能比较弱,想实现全自动定时同步,更推荐用命令行工具,比如lftp或者rsync,但这就偏离FileZilla的范畴了。
如果非要用FileZilla做批量备份,我建议配合Windows的任务计划程序:写一个批处理脚本,调用FileZilla的命令行接口(filezilla.exe,带参数-s站点名),每天定时上传。文件Zilla官方文档有命令行参数的说明,有兴趣可以翻一下,这里不展开。
6.3 结合 rsync 的优点
说实话,如果是大规模目录同步,比如整个项目文件几百G,FileZilla这种图形工具就不太够看了。这种情况我更偏向直接用rsync:
rsync -avz --progress /本地/目录 用户名@IP:/远程/目录rsync的增量传输算法特别适合大目录,只传输变化的部分。比如你备份了一个10G的项目,第二次备份只改了其中一个10M的文件,rsync只需要几百K的传输量,FileZilla就要老老实实扫一遍。
不过rsync学习成本高,参数也多。我的建议是:日常少量文件互传直接用FileZilla;项目备份同步用rsync。两者结合互补,才是最高效的方案。
7. 实战场景演示:完整跑通一次传输
我以一个典型流程来演示,方便你照做。
场景:Windows 11上有一个项目压缩包project_v1.0.zip,大小是850MB,要传到Ubuntu 20.04的~/share目录下。
第一步:打开FileZilla,站点管理器连接到Ubuntu。
第二步:左侧本地窗格导航到Windows存放压缩包的路径,例如D:\backup。右侧远程窗格,双击进入share目录。
第三步:左键按住project_v1.0.zip,拖到右侧share目录里,松开鼠标。FileZilla下方队列区就会显示上传进度,速度大概能跑到50-100MB/s,取决于硬盘和网络环境(如果是同一台电脑的双系统场景,网络走的是lo回环,速度基本等于磁盘速度,很快)。
第四步:传输完成后,右侧窗格看到project_v1.0.zip,右键选择“下载”也可以验证。
第五步:在Ubuntu终端解压验证:
cd ~/share unzip project_v1.0.zip一切正常。
这个流程虽然简单,但如果你第一次操作,可能因为防火墙、SSH、编码、权限这四个坑中的任何一个导致卡住。所以我把排错顺序再强调一遍:网络 → SSH服务 → 端口 → 防火墙 → 账号权限 → 编码。按这个顺序走,再难的问题都能解决。
8. 传输性能优化建议
8.1 影响速度的关键因素
用FileZilla传文件,速度慢主要出在三个环节:网络带宽、磁盘IO、FileZilla配置。
对于同一台电脑的双系统,因为Ubuntu和Windows互传其实是通过虚拟网卡走的回环,速度理论上可以达到磁盘速度。但如果你把Ubuntu装在虚拟机里,那传输速度就会受虚拟网络适配器限制,有时候只有20MB/s,这是正常现象。
局域网物理机互传的话,千兆局域网一般能跑到90-120MB/s。如果跑不到,检查网线、路由器是否千兆,无线是否5G频段。802.11n的2.4G频段最高也就50MB/s,5G频段能跑到100MB/s以上。
8.2 FileZilla 侧的调优设置
打开“设置 > 传输”,把“最大并发传输数”从默认的6调高到16,传输大量小文件效果明显。
另一个容易忽略的选项是“缓冲大小”。FileZilla有默认缓冲大小,但如果你的内存充裕,可以把“高速缓存”调到256MB,减少IO次数。
同时,在“传输”里勾选“以压缩模式传递”,类似SFTP的压缩。CPU性能还行的话,开压缩能更省带宽,但会消耗一些CPU。传文本、HTML、代码这类可压缩文件时效果明显,传已经压缩过的zip、mp4那就别开了,纯属白耗CPU。
8.3 大文件断点续传的陷阱
FileZilla的断点续传不是绝对可靠的,尤其是用FTP普通模式时,如果服务器不支持REST命令,断点续传就失效。好在SFTP协议一直支持,但你在操作时需要注意:必须保证目标文件的名称完全一致,且远程目录已存在同名文件,FileZilla才会询问你是“覆盖”、“续传”还是“跳过”。如果你远程目录里没有同名文件,那只能重新传输。
所以在传大的ISO、数据库备份文件前,建议先手工在远程目录创建同名占位文件,然后传输时选择“续传”。不过这个操作比较冷门,其实就是想告诉大家,传输大文件时别中途点断开,否则只能重来。
9. 安全加固与日常维护
9.1 修改默认 SSH 端口(可选)
如果你对安全有要求,可以把SSH端口从22改成其他高位端口,比如2222。
编辑/etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config找到Port 22,改成Port 2222,保存退出,重启SSH:
sudo systemctl restart ssh然后FileZilla连接时,端口填2222即可。注意改之前确认新端口防火墙放行。这样做能减少一部分扫描器的攻击噪音,虽然不能完全避免,但能挡掉不少自动脚本。
9.2 使用密钥登录替代密码登录
长期使用密码登录,容易被暴力破解。推荐生成密钥对,用私钥在FileZilla里登录,更安全。
在Ubuntu终端生成密钥对:
ssh-keygen -t ed25519 -C "ubuntu-sftp-key"一路回车,默认生成在~/.ssh/id_ed25519和id_ed25519.pub。然后把公钥写入authorized_keys:
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys接着在Windows上用FileZilla:菜单“编辑 > 设置”,找到“连接 > SFTP”,添加私钥文件(也就是我刚才说的id_ed25519文件)。然后把私钥先下载到Windows本地。连接时,登录类型选择“密钥文件”,浏览到该私钥,再填用户名,就可以免密登录了。
生成密钥后建议立即测试。还有,如果私钥带密码,那么使用的时候FileZilla会提示输入私钥的密码,这也是一道保险。
9.3 定期清理传输记录
FileZilla会默认记录最近访问的站点和文件,在公共电脑上使用后,记得在“文件 > 清除私人数据”里勾选所有选项,清空传输历史。平时在家用电脑无所谓,但如果是靠共享主机办公,最好还是勤快一点。
另外,Ubuntu侧的系统日志会记录SSH登录信息,偶尔抽查一下:
sudo grep sshd /var/log/auth.log | tail -20看看有没有异常登录尝试,提前发现问题。
10. 常见问题速查表
为了避免你四处翻找,我把刚才提到的重点问题汇总成一张表,直接对照排查。
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 连接超时 | 网络不通 / 防火墙拦截 | ping测试;放行22端口 |
| 连接被拒绝 | SSH服务未启动 | systemctl start ssh |
| 登录成功但目录列表为空 | 用户主目录权限异常 | 查看主目录权限,修复为755 |
| 中文目录乱码 | 编码不匹配 | FileZilla站点设置强制UTF-8 |
| 上传提示权限拒绝 | 目标目录无写权限 | chown或chmod修改权限 |
| 传输速度很慢 | 并发数低 / 无线信号差 | 提高并发数;使用千兆有线 |
| 断点续传失败 | 同名文件不存在 | 先创建占位文件 |
| 大文件传一半断开 | 网络不稳定 | 开启传输队列,续传 |
| 密码无法粘贴 | 客户端的密码框限制 | 手动输入,或使用密钥登录 |
这张表基本覆盖了90%的新手问题。如果遇到表里没有的,欢迎留言补充,我后续再整理成专题。
11. 个人使用体验小结
折腾了这么久FileZilla,我对它的评价是:不花哨,但足够稳定可靠。如果你只是需要一个快速可靠的SFTP图形客户端,它完全够用。界面虽然老旧了点,但功能扎实,没有乱七八糟的广告,在同类工具里已经很难得了。
我自己现在日常的双系统文件交换,主要就是靠FileZilla这一个工具。Windows 11这边装客户端,Ubuntu 20.04那边开SSH,两边都在同一个局域网,随连随传,完全替代了U盘。特别是传那些几十GB的虚拟机镜像、数据集,FileZilla的断点续传和队列功能真的帮了大忙。
最后再分享一个小技巧:你可以在Windows桌面创建一个快捷方式,指向FileZilla,并在快捷方式属性里加上站点名参数,比如"C:\Program Files\FileZilla FTP Client\filezilla.exe" -s "我的Ubuntu",这样双击就能直接连接,不用再打开软件、选站点、点连接这一串操作。这个功能是我偶然发现的,对高频使用的场景特别友好。
希望这篇能帮你顺利实现Ubuntu和Windows 11之间的文件互传。有什么配置上的问题,多试几次,别慌,按本文的排查顺序一步步来,总能搞定。