传输文件到服务器,最佳选择是使用基于SSH的SFTP协议,它加密传输过程,比传统FTP更安全,操作也几乎一样简单。
在日常运维或网站管理中,很多人会遇到“ftp传输文件到服务器”这个需求,但服务器往往只开放SSH端口,传统FTP走21端口容易被拦截,且明文传输密码风险高,SSH协议主机天然支持SFTP,无需额外配置FTP服务,就能直接完成文件传输,下面我从工具选择、命令操作、场景对比到问题排查,把整个流程拆开讲清楚。
理解FTP与SFTP:传输文件到服务器的两种路径
传统FTP(File Transfer Protocol)设计于上世纪70年代,采用客户端-服务器模式,默认使用21端口控制连接,20端口数据连接,它有两个致命弱点:都是明文传输,容易在中间环节被截获;FTP需要单独开启服务端(如vsftpd、ProFTPD),增加攻击面。
SFTP(SSH File Transfer Protocol)是SSH协议的子协议,默认使用22端口,利用SSH的加密隧道传输数据,它不需要额外开启FTP服务,只要服务器支持SSH登录(绝大多数Linux服务器都默认开启),就能直接使用SFTP,这种模式天然适合SSH协议主机,因为传输层已经加密,安全等级高出一个量级。
行业共识认为,对于任何暴露在公网的主机,尤其是涉及敏感数据同步的场景,直接使用SFTP替代传统FTP是最基本的操作规范,近年来,主流云服务商(如简米云、酷番云)的默认安全组策略也倾向于只放行22端口,手动开放21端口反而会增加被扫描的风险。
准备工作:SSH协议主机与必要工具
在开始传输之前,你需要确认三件事:
- 服务器已开启SSH服务(通常默认开启,端口22),ftp传输文件到服务器”的传统认知里,很多人会先去安装FTP服务,但如果你服务器本身就是SSH主机,这一步完全可以跳过。
- 拥有SSH登录凭据(用户名、密码或密钥),SFTP复用SSH认证,密钥对登录更推荐,安全性更高。
- 选择合适的客户端工具,图形界面推荐FileZilla、WinSCP;命令行则直接用系统自带的sftp命令,如果你需要定时批量传输,还可以用lftp或rsync over SSH,但后者不是纯SFTP。
常见客户端获取方式
- Windows:FileZilla(免费,支持FTP、SFTP、FTPS);WinSCP(轻量,集成同步功能);PuTTY套件中的PSFTP(纯命令行)。
- macOS/Linux:终端自带sftp命令;或使用命令行工具如lftp(支持更多协议)。
- 跨平台:终端sftp命令在任何系统上都可用,无需额外安装。
如何用SFTP传输文件到服务器:详细步骤
命令行方式:最直接,适合脚本化和服务器管理
假设你的服务器IP为192.168.1.100,用户名为root,在本地终端输入:
sftp root@192.168.1.100
首次连接会提示确认主机密钥,输入yes后回车,再输入密码(或使用密钥自动登录),就进入SFTP交互界面,此时你会看到sftp> 提示符,支持的常用命令包括:
ls:列出远程目录lls:列出本地目录cd:切换远程目录lcd:切换本地目录put:上传文件(put localfile)get:下载文件(get remotefile)put -r:上传整个目录get -r:下载整个目录exit:退出
示例:上传本地文件到服务器
sftp> lcd /home/yourname/local
sftp> cd /var/www/html
sftp> put index.html
示例:从服务器下载文件到本地
sftp> get /var/log/nginx/access.log
如果需要在单行命令中直接完成传输,也可以使用:
sftp root@192.168.1.100:/var/www/html/ <<< $'put index.html'
但对于批量操作,更推荐编写脚本使用expect或sshpass(注意安全性),或者直接用rsync -avz -e ssh,虽然不是纯SFTP,但底层同样走SSH隧道。
图形界面方式:可视化,适合新手和日常维护
以FileZilla为例,打开软件后选择“站点管理器”,新建站点,协议选择“SFTP”(不要选FTP),主机输入IP,端口留空或填22,登录类型选“正常”或“密钥文件”,填入用户名密码,连接成功后,左侧是本地目录,右侧是远程目录,直接拖拽就能上传或下载。注意: 如果服务器只允许密钥登录,需要在FileZilla的站点设置中加载私钥文件(.ppk或.pem)。
FileZilla还可以设置传输队列、断点续传、限制速度等,遇到大文件传输失败时很实用。
FTP与SFTP:传输文件到服务器时该怎么选?
很多人在买服务器时看到“FTP服务”之类的选项,会纠结到底要不要装。对于SSH协议主机,直接放弃FTP,全面转向SFTP,下面用表格对比两者核心差异:
| 对比维度 | 传统FTP | SFTP |
|---|---|---|
| 传输加密 | 无(明文) | 全链路加密(SSH) |
| 所需端口 | 21(控制)+ 20(数据)或随机端口 | 22(复用SSH) |
| 是否需要额外服务 | 需要安装FTP服务端 | 不需要,SSH自带 |
| 防火墙配置 | 复杂,需要开放多个端口,且被动模式需设置端口范围 | 简单,只需开放22端口 |
| 认证方式 | 用户名密码(明文传输) | 密码或密钥(加密传输) |
| 跨平台兼容性 | 好,但现代系统趋势是弃用 | 极好,所有主流OS的SSH客户端都支持 |
| 传输效率 | 略微高,因为无加密损耗 | 稍低,但现代硬件下几乎可忽略 |
| 断点续传 | 大多数客户端支持 | 同样支持(sftp命令默认支持,FileZilla也行) |
除非你需要在旧系统之间传输不敏感的文件,且很难改配置,否则一律选SFTP,很多新手问“ftp传输文件到服务器需要什么工具”,如果服务器是SSH主机,直接告诉他用FileZilla选SFTP协议就够了,连FTP软件都不用装(系统自带sftp命令)。
传输文件到服务器常见问题:速度慢、连接失败怎么办
连接失败:SSH服务未启动或被防火墙拦截
登录服务器,检查SSH服务状态:
systemctl status sshd
如果未启动,执行systemctl start sshd并设置开机自启,同时检查云平台安全组或本地防火墙,确保22端口允许你的IP访问,如果用的是酷番云轻量服务器,默认安全组规则可能只放行部分IP,需手动添加目标IP。
传输速度慢:多为网络延迟或加密算法开销
SFTP本身有加密开销,但现代服务器CPU都支持AES硬件加速,影响不大,如果感觉慢,先检查网络带宽是否跑满,可以用iperf3测试,如果通过其他链路传输文件(例如使用FTP在局域网内),速度确实会比SFTP快,但涉及公网时,这点差异远小于安全收益。
优化建议: 对于超大文件(如几十GB),可以改用rsync over SSH,它支持增量传输,能大幅减少数据量,或者使用scp命令(也是基于SSH,但比SFTP更简单,不过不支持断点续传),如果服务器带宽有限,可以在FileZilla中设置最大并发连接数和传输速度限制,避免占用过多资源。
权限错误:目录不可写或文件系统挂载为只读
上传失败时,先用ls -l检查远程目录权限,确保你的SSH用户对目标目录有写权限,如果使用非root用户,可能需要将目录所有者改为该用户,或使用chmod设置权限。
sudo chown -R myuser /var/www/html
sudo chmod -R 755 /var/www/html
SSH主机传输文件,SFTP就是最优解
对于SSH协议主机,不需要额外安装FTP服务,直接使用SFTP即可完成所有文件传输需求。 它安全、配置简单、工具链成熟,无论是命令行还是图形界面,操作门槛都很低,如果你还在用传统FTP传输文件到服务器,建议尽快迁移到SFTP,避免因密码泄露导致服务器被入侵。
Q&A:关于ftp传输文件到服务器的常见问题
问:SFTP和FTP哪个传输文件更快?
大多数情况下,FTP在局域网内速度略快,因为无加密损耗,但在公网环境下,带宽才是瓶颈,加密开销几乎可以忽略,而且FTP的被动模式配置复杂,稍有不慎就会导致连接失败,反而更慢。从实际体验看,SFTP的稳定性和安全性远超FTP,速度差异在5%以内,不值得为此牺牲安全。
问:我的服务器只支持SSH登录,怎么用FTP传输文件?
你不必用FTP,直接使用SFTP,它就是基于SSH的文件传输协议,如果你的客户端软件(如FileZilla)里找不到SFTP选项,请更新到最新版本。所有支持SSH的服务器,天然支持SFTP,无需额外配置。
问:如何检查服务器是否支持SFTP?
只要服务器允许SSH登录,就支持SFTP,你可以尝试用sftp命令连接服务器,如果成功进入交互界面,说明支持,或者查看SSH配置文件/etc/ssh/sshd_config,确认Subsystem sftp /usr/lib/openssh/sftp-server没有被注释掉,这是默认配置,几乎不会改动。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/578450.html




