SFTP Linux Windows 连接与传输全攻略:从安装配置到常见故障排查
一、关键词理解:SFTP 是什么,为什么 Linux 和 Windows 都常用它
SFTP 全称是 SSH File Transfer Protocol,可以理解为“通过 SSH 加密通道传文件”的方式。
它和普通 FTP 最大的区别就是:安全。传输过程中数据会被加密,不容易被窃听,也更适合在公网、内网远程管理、服务器运维、NAS 文件传输时使用。
如果你经常在 Linux 和 Windows 之间互传文件,SFTP 基本是最稳妥的方案之一,尤其适合这些场景:
- 从 Windows 上传文件到 Linux 服务器
- 从 Linux 下载 Windows 机器上的备份文件
- 连接云服务器、家用 NAS、树莓派
- 做网站程序部署、日志下载、配置文件备份
- 在局域网或公网远程传大文件
二、问题分析:为什么很多人会卡在 SFTP 上
很多人第一次用 SFTP,会遇到下面这些问题:
- Linux 端不知道怎么开启 SFTP 服务
- Windows 端不知道用什么软件连接
- 账号密码明明对,但就是连不上
- 传文件时提示权限不足
- 连上了却看不到目标目录
- 防火墙、端口、SSH 服务没开
- Windows 和 Linux 路径写法不一样,容易搞混
其实这类问题大多不是 SFTP 本身复杂,而是 SSH 服务、权限、端口、客户端工具 这几块没理顺。
三、解决方案:Linux 端开启 SFTP 服务
SFTP 通常不是单独装一个“sftp服务”,而是依赖 SSH 服务(sshd)。
也就是说,只要 Linux 开了 SSH,SFTP 通常也就能用了。
1. 在 Linux 上安装 SSH 服务
Ubuntu / Debian 系统
打开终端,执行:
sudo apt update
sudo apt install openssh-server -y
安装后检查状态:
sudo systemctl status ssh
如果没启动,执行:
sudo systemctl start ssh
sudo systemctl enable ssh
CentOS / Rocky / AlmaLinux
执行:
sudo yum install openssh-server -y
启动并设置开机自启:
sudo systemctl start sshd
sudo systemctl enable sshd
查看状态:
sudo systemctl status sshd
2. 检查 SFTP 是否可用
一般来说,SSH 服务正常后,SFTP 默认就可用了。
你可以在 Linux 上先确认 22 端口是否监听:
sudo netstat -tlnp | grep ssh
或者:
sudo ss -tlnp | grep ssh
如果看到 :22,说明 SSH 正在监听。
3. 如需限制 SFTP 用户,配置专用目录
有些服务器为了安全,会让某个用户只能用 SFTP,不能直接 SSH 登录。
编辑配置文件:
sudo nano /etc/ssh/sshd_config
确认或加入这类配置:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
然后重启 SSH:
sudo systemctl restart sshd
注意:如果用了
ChrootDirectory,目录权限要求很严格,根目录通常必须归root所有,不能给普通用户随便写权限,否则会连接失败。
四、Windows 端如何连接 Linux 的 SFTP
Windows 上连接 SFTP,最常用、最简单的工具有两个:
- WinSCP:最适合新手,界面直观,拖拽文件非常方便
- FileZilla:也常用,支持 FTP/SFTP,但界面和设置相对更杂一些
如果你只是要“连上去传文件”,优先推荐 WinSCP。
方案一:使用 WinSCP 连接
1. 下载并安装 WinSCP
安装完成后打开软件,选择:
- 协议:
SFTP - 主机名:Linux 服务器的 IP 地址
- 端口号:
22 - 用户名:Linux 用户名
- 密码:对应密码
例如:
- 主机名:
192.168.1.100 - 端口:
22 - 用户名:
root或普通用户 - 密码:登录密码
点击“登录”即可。
2. 连接成功后怎么传文件
WinSCP 的界面通常是左右两边:
- 左边:本地 Windows 文件
- 右边:远程 Linux 文件
你可以直接:
- 拖拽上传
- 拖拽下载
- 右键复制
- 批量传输
这对小白非常友好,几乎不需要记命令。
方案二:使用 FileZilla 连接
打开 FileZilla 后,在顶部快速连接栏填写:
- 主机:
sftp://192.168.1.100 - 用户名:Linux 用户名
- 密码:Linux 密码
- 端口:
22
点击快速连接即可。
如果提示“连接被拒绝”或“无法建立连接”,一般先检查 Linux 端 SSH 服务、端口、防火墙。
方案三:Windows 自带命令行连接
如果你偏向专业一点,也可以直接用 Windows 终端或 PowerShell。
连接命令:
sftp 用户名@192.168.1.100
例如:
sftp root@192.168.1.100
第一次连接会提示是否信任主机指纹,输入 yes。
连接成功后常用命令如下:
ls
cd 目录名
pwd
get 文件名
put 文件名
exit
五、Linux 和 Windows 之间传文件的常用命令
1. 从 Windows 上传到 Linux
在 Windows 命令行进入文件所在目录后,执行:
sftp user@192.168.1.100
put test.zip
如果要传整个文件夹,命令行 SFTP 本身不太方便,建议直接用 WinSCP。
2. 从 Linux 下载到 Windows
连接后执行:
get /home/user/test.zip
3. 指定目录传输
例如把 Windows 上的文件传到 Linux 的 /home/user/upload:
put C:\Users\YourName\Desktop\test.zip /home/user/upload/
不过在 Windows 自带 sftp 命令里,路径和命令写法容易出错,新手不建议优先用命令行直接传大量文件。
六、常见故障排查:连不上、传不了文件怎么办
1. 提示连接超时
常见原因:
- Linux 没开 SSH 服务
- 22 端口没开放
- 防火墙拦截了
- IP 地址写错了
- 服务器根本不在线
排查步骤:
sudo systemctl status sshd
或 Ubuntu:
sudo systemctl status ssh
检查端口:
ss -tlnp | grep 22
检查防火墙:
Ubuntu UFW
sudo ufw status
sudo ufw allow 22/tcp
CentOS firewalld
sudo firewall-cmd --list-ports
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload
2. 提示用户名或密码错误
常见原因:
- 密码输错
- 用户名写错
- Linux 禁止 root 远程登录
- SSH 配置限制了密码登录
检查 SSH 配置文件:
sudo nano /etc/ssh/sshd_config
重点看这几个项:
PasswordAuthentication yes
PermitRootLogin yes
修改后重启:
sudo systemctl restart sshd
安全建议:如果是公网服务器,不建议长期开放 root 密码直登,最好改用普通用户 + sudo,或者直接用密钥登录。
3. 连接成功但没有权限上传
这种情况很常见,尤其是上传到系统目录时,比如:
/var/www/html/root/etc- 其他 root 才能写的目录
解决办法:
方法一:先上传到自己的家目录,再用 sudo 移动
例如先传到:
/home/youruser/
然后在 Linux 上执行:
sudo mv /home/youruser/file.zip /var/www/html/
方法二:调整目录属主
如果这是你自己管理的目录,可以:
sudo chown -R youruser:youruser /home/youruser/upload
4. 看得到目录,但打不开某些文件夹
原因通常是 Linux 文件权限不足。
查看权限:
ls -l
如果某个目录权限太严,普通用户没有读写权限,就会打不开。
修改权限时要谨慎,推荐优先改属主,不要一上来就 chmod 777。
因为 777 虽然省事,但安全性很差。
5. 传输很慢
可能原因:
- 网络带宽小
- 跨公网延迟高
- 服务器 CPU 性能弱
- 磁盘 IO 慢
- SFTP 加密开销
- 同时有其他任务占用资源
优化建议:
- 尽量在同一局域网内传输
- 选择有线网络
- 关闭不必要的后台占用
- 大文件尽量打包后再传
- 服务器上避免磁盘满载
七、进阶方案:使用密钥登录,更安全更方便
密码登录虽然简单,但安全性一般。
如果你经常连 Linux 服务器,建议改成 SSH 密钥登录,SFTP 也能一起受益。
1. Windows 生成密钥
在 Windows PowerShell 输入:
ssh-keygen
一路回车,默认会生成公钥和私钥。
2. 把公钥复制到 Linux
使用:
ssh-copy-id user@192.168.1.100
如果 Windows 没有这个命令,也可以手动把 id_rsa.pub 内容复制到 Linux 的:
~/.ssh/authorized_keys
3. 用密钥连接
之后在 WinSCP、FileZilla 或命令行里选择密钥认证,就不用每次输密码了。
优点:
- 更安全
- 更方便
- 适合长期管理服务器
八、Linux 与 Windows 传文件的最佳实践
新手最推荐的组合
- Linux 端:安装并开启
openssh-server - Windows 端:用 WinSCP
- 连接方式:SFTP,端口 22
- 认证方式:先密码,熟练后换密钥
家庭局域网使用建议
如果是家里 Windows 电脑和 Linux NAS / 服务器互传:
- 直接用局域网 IP
- 关闭不必要的公网暴露
- 路由器里别乱开端口映射
- 先确认彼此能
ping通 - 传大文件最好走千兆有线
公网服务器使用建议
如果是云服务器:
- 改 SSH 默认端口更稳妥
- 禁用 root 密码直登
- 开启密钥登录
- 配合防火墙限制来源 IP
- 定期备份重要数据
九、最常用的 SFTP 命令速查
如果你用命令行,这几个命令最实用:
sftp user@ip
ls
cd folder
pwd
get file.txt
put file.txt
mkdir newfolder
rm file.txt
exit
常见含义:
ls:看远程目录文件cd:切换远程目录pwd:查看远程当前路径get:下载到本地put:上传到远程mkdir:新建目录rm:删除文件exit:退出连接
十、总结:Linux 和 Windows 用 SFTP 传文件,记住这几步就够了
一句话概括
Linux 开 SSH 服务,Windows 用 WinSCP 连 SFTP,端口默认 22,账号密码正确,权限放对,基本就能稳定传文件。
实操顺序
- Linux 安装并启动 SSH 服务
- 确认 22 端口开放
- Windows 安装 WinSCP
- 填 IP、用户名、密码、端口 22
- 登录后拖拽传文件
- 如果失败,优先查服务、端口、防火墙、权限
最容易踩坑的地方
- 只开了系统,但没开 SSH 服务
- 防火墙挡住 22 端口
- 用户没有目标目录写权限
- root 登录被禁用
- IP 写错或服务器不在线
只要把这几个点处理好,SFTP 在 Linux 和 Windows 之间传文件会非常稳定,而且比传统 FTP 安全得多。

还没有评论,来说两句吧...