sftp linux windows

老刘

SFTP Linux Windows 连接与传输全攻略:从安装配置到常见故障排查

一、关键词理解:SFTP 是什么,为什么 Linux 和 Windows 都常用它

SFTP 全称是 SSH File Transfer Protocol,可以理解为“通过 SSH 加密通道传文件”的方式。
它和普通 FTP 最大的区别就是:安全。传输过程中数据会被加密,不容易被窃听,也更适合在公网、内网远程管理、服务器运维、NAS 文件传输时使用。

如果你经常在 Linux 和 Windows 之间互传文件,SFTP 基本是最稳妥的方案之一,尤其适合这些场景:

  • 从 Windows 上传文件到 Linux 服务器
  • 从 Linux 下载 Windows 机器上的备份文件
  • 连接云服务器、家用 NAS、树莓派
  • 做网站程序部署、日志下载、配置文件备份
  • 在局域网或公网远程传大文件

二、问题分析:为什么很多人会卡在 SFTP 上

很多人第一次用 SFTP,会遇到下面这些问题:

  1. Linux 端不知道怎么开启 SFTP 服务
  2. Windows 端不知道用什么软件连接
  3. 账号密码明明对,但就是连不上
  4. 传文件时提示权限不足
  5. 连上了却看不到目标目录
  6. 防火墙、端口、SSH 服务没开
  7. 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,账号密码正确,权限放对,基本就能稳定传文件。

实操顺序

  1. Linux 安装并启动 SSH 服务
  2. 确认 22 端口开放
  3. Windows 安装 WinSCP
  4. 填 IP、用户名、密码、端口 22
  5. 登录后拖拽传文件
  6. 如果失败,优先查服务、端口、防火墙、权限

最容易踩坑的地方

  • 只开了系统,但没开 SSH 服务
  • 防火墙挡住 22 端口
  • 用户没有目标目录写权限
  • root 登录被禁用
  • IP 写错或服务器不在线

只要把这几个点处理好,SFTP 在 Linux 和 Windows 之间传文件会非常稳定,而且比传统 FTP 安全得多。

文章版权声明:文章内容均来源于各大短视频平台搜集以及修改和删减新增,如有侵权或者违规,请联系站长进行删除,如需转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
验证码
评论列表 (暂无评论,3人围观)

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

目录[+]