Ubuntu+Windows共享文件夹

一、SSHFS文件共享方案

1.1 概述

基于SSH协议的SSHFS挂载方案,实现Ubuntu和Windows之间的安全文件共享。适合个人开发环境和需要加密传输的场景。

1.2 软件依赖关系

依赖架构

1
2
Windows端:
应用程序 → SSHFS-Win → WinFsp → Windows内核

安装顺序

  1. 先安装WinFsp(底层文件系统框架)

  2. 再安装SSHFS-Win(依赖WinFsp)

  3. 重启系统确保驱动加载

卸载顺序

先卸载SSHFS-Win,再卸载WinFsp

1.3 Ubuntu端配置

安装SSH服务

1
2
3
4
sudo apt update
sudo apt install openssh-server
sudo systemctl start ssh
sudo systemctl enable ssh

配置防火墙

1
2
sudo ufw allow ssh
sudo ufw status

创建共享目录

1
2
mkdir ~/shared
chmod 755 ~/shared

验证SSH服务

1
2
3
sudo systemctl status ssh
sudo ss -tlnp | grep :22
ssh localhost # 测试本地连接

1.4 Windows端配置

下载安装

  1. WinFsp: https://github.com/billziss-gh/winfsp/releases

  2. SSHFS-Win: https://github.com/billziss-gh/sshfs-win/releases

安装后检查环境变量

安装完成后检查系统PATH环境变量是否包含SSHFS-Win路径:

1
echo %PATH% | findstr sshfs

如果没有找到,需要手动添加环境变量:

  1. 右键”此电脑” → “属性” → “高级系统设置”

  2. 点击”环境变量”

  3. 在系统变量中找到”Path”,点击”编辑”

  4. 添加SSHFS-Win安装路径(通常是 C:\Program Files\SSHFS-Win\bin

验证安装

1
2
sshfs-win  # 应显示使用帮助
sc query WinFsp.Launcher # 检查WinFsp服务

重启系统

确保驱动和环境变量生效

1.5 挂载操作

基本命令格式

1
sshfs-win svc \sshfs\username@host\path drive:

路径模式说明

  • \sshfs\ - 相对于用户家目录 (/home/username/)

  • \sshfs.r\ - 相对于系统根目录 (/)

常用挂载命令

1
2
3
4
5
6
7
8
9
10
# 挂载用户家目录下的shared文件夹
sshfs-win svc \sshfs\trg@192.168.1.100\shared Z:
# 挂载用户家目录的绝对路径(使用root模式)
sshfs-win svc \sshfs.r\trg@192.168.1.100\home\trg\shared Z:
# 挂载系统根目录下的路径
sshfs-win svc \sshfs.r\trg@192.168.1.100\var\log Z:
# 指定端口
sshfs-win svc \sshfs\trg@192.168.1.100!2222\shared Z:
# 调试模式
sshfs-win svc \sshfs\trg@192.168.1.100\shared Z: -d

卸载挂载

1
2
3
sshfs-win svc \sshfs\trg@192.168.1.100\shared Z: -u
# 或
net use Z: /delete

1.6 自动化脚本

自动挂载脚本 (mount_ubuntu_sshfs.bat)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set REMOTE_USER=trg
set REMOTE_HOST=192.168.1.100
set REMOTE_PATH=shared
set LOCAL_DRIVE=Z:
echo 正在连接到 %REMOTE_USER%@%REMOTE_HOST%...
sshfs-win svc \sshfs\%REMOTE_USER%@%REMOTE_HOST%\%REMOTE_PATH% %LOCAL_DRIVE%
if %errorlevel% == 0 (
echo 挂载成功!
explorer %LOCAL_DRIVE%
) else (
echo 挂载失败,请检查网络和SSH服务
)
pause

1.7 常见问题

错误67:找不到网络名

  • 检查WinFsp和SSHFS-Win是否正确安装

  • 重启WinFsp.Launcher服务

  • 检查环境变量PATH是否包含SSHFS-Win路径

目录不存在错误

1
2
3
# Ubuntu端创建目录
mkdir -p ~/shared
chmod 755 ~/shared

连接被拒绝

1
2
3
# 检查SSH服务
sudo systemctl status ssh
sudo ufw allow ssh

认证失败

1
2
3
4
# 测试SSH连接
ssh username@host
# 重置密码
sudo passwd username

Connection reset by peer

  • 检查公司网络是否限制SSH文件传输

  • 尝试使用IP地址替代主机名

  • 检查SSH服务器配置中的MaxSessions设置

1.8 安全配置

SSH密钥认证

1
2
3
4
5
6
# 生成密钥
ssh-keygen -t rsa -b 4096
# 复制公钥到Ubuntu
ssh-copy-id username@host
# 使用密钥挂载
sshfs-win svc \sshfs.k\username@host\shared Z:

SSH安全加固

1
2
3
4
5
6
7
# 编辑SSH配置
sudo nano /etc/ssh/sshd_config
# 推荐设置
Port 2222
PermitRootLogin no
MaxAuthTries 3
AllowUsers username

1.9 性能优化

挂载选项

1
2
3
4
# 启用缓存和压缩
sshfs-win svc \sshfs\username@host\shared Z: -o cache=yes,compression=yes
# 连接保活
sshfs-win svc \sshfs\username@host\shared Z: -o ServerAliveInterval=15

二、SMB/Samba文件共享方案

2.1 概述

基于SMB协议的文件共享方案,提供Windows原生支持的网络文件共享服务。相比SSHFS,SMB在企业网络环境中兼容性更好,不易被防火墙阻断,适合企业网络环境和高性能文件传输需求。

2.2 软件依赖关系

依赖架构

1
2
3
4
5
Ubuntu端:
应用程序 → Samba服务 → Linux内核

Windows端:
文件资源管理器 → Windows SMB客户端 → Windows内核

安装要求

  • Ubuntu端:安装Samba服务

  • Windows端:使用内置SMB客户端(无需额外安装)

2.3 Ubuntu端配置

安装Samba服务

1
2
sudo apt update
sudo apt install samba samba-common-bin

创建共享目录

1
2
3
4
# 创建共享目录
sudo mkdir -p /home/trg/Desktop/shared
sudo chown trg:trg /home/trg/Desktop/shared
sudo chmod 755 /home/trg/Desktop/shared

配置Samba

1
2
3
4
5
# 备份原配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

# 编辑配置文件
sudo nano /etc/samba/smb.conf

在文件末尾添加共享配置:

files
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[shared]
comment = Ubuntu Shared Folder
path = /home/trg/Desktop/shared
browseable = yes
writable = yes
guest ok = no
valid users = trg
create mask = 0644
directory mask = 0755
force user = trg
force group = trg

[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mask = 0644
directory mask = 0755

创建Samba用户

1
2
3
4
5
6
# 添加Samba用户(必须是系统已存在用户)
sudo smbpasswd -a trg
# 输入Samba密码(可以与系统密码不同)

# 启用用户
sudo smbpasswd -e trg

配置防火墙

1
2
3
4
5
6
7
# 允许Samba服务
sudo ufw allow samba
# 或者指定端口
sudo ufw allow 139/tcp
sudo ufw allow 445/tcp
sudo ufw allow 137/udp
sudo ufw allow 138/udp

启动服务

1
2
3
4
5
6
7
8
9
10
11
# 重启Samba服务
sudo systemctl restart smbd
sudo systemctl restart nmbd

# 设置开机自启
sudo systemctl enable smbd
sudo systemctl enable nmbd

# 检查服务状态
sudo systemctl status smbd
sudo systemctl status nmbd

验证配置

1
2
3
4
5
6
7
8
# 测试配置文件语法
testparm

# 查看共享列表
smbclient -L localhost -U trg

# 查看监听端口
sudo ss -tlnp | grep -E ':(139|445)'

2.4 Windows端配置

访问共享

1
2
3
4
5
6
# 通过文件资源管理器访问
\\ubuntu24\shared
\\192.168.1.100\shared

# 通过命令行访问
net use Z: \\ubuntu24\shared /user:trg

映射网络驱动器

  1. 打开文件资源管理器

  2. 右键”此电脑” → “映射网络驱动器”

  3. 驱动器选择:Z:

  4. 文件夹:\\ubuntu24\shared

  5. 勾选”登录时重新连接”

  6. 勾选”使用其他凭据连接”

  7. 输入用户名:trg

  8. 输入密码:Samba密码

命令行操作

1
2
3
4
5
6
7
8
9
10
11
# 映射驱动器
net use Z: \\ubuntu24\shared /user:trg /persistent:yes

# 查看网络驱动器
net use

# 断开驱动器
net use Z: /delete

# 断开所有网络驱动器
net use * /delete

2.5 自动化脚本

自动挂载脚本 (mount_ubuntu_smb.bat)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
set REMOTE_HOST=ubuntu24
set REMOTE_SHARE=shared
set REMOTE_USER=trg
set LOCAL_DRIVE=Z:

echo 正在连接到 \\%REMOTE_HOST%\%REMOTE_SHARE%...
net use %LOCAL_DRIVE% \\%REMOTE_HOST%\%REMOTE_SHARE% /user:%REMOTE_USER% /persistent:yes

if %errorlevel% == 0 (
echo 挂载成功!
explorer %LOCAL_DRIVE%
) else (
echo 挂载失败,请检查网络和Samba服务
echo 错误代码: %errorlevel%
)
pause

自动卸载脚本 (unmount_smb.bat)

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
set LOCAL_DRIVE=Z:

echo 正在断开 %LOCAL_DRIVE% 驱动器...
net use %LOCAL_DRIVE% /delete /yes

if %errorlevel% == 0 (
echo 卸载成功!
) else (
echo 卸载失败
echo 错误代码: %errorlevel%
)
pause

2.6 高级配置

性能优化

files
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 在 /etc/samba/smb.conf 的 [global] 部分添加
[global]
# 性能优化
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
read raw = yes
write raw = yes
max xmit = 65535
dead time = 15
getwd cache = yes

# 安全设置
security = user
encrypt passwords = yes
passdb backend = tdbsam

# 网络设置
workgroup = WORKGROUP
server string = Ubuntu Samba Server
netbios name = UBUNTU24

安全配置

files
1
2
3
4
5
6
7
8
9
10
# 限制访问IP
hosts allow = 192.168.1.0/24 127.0.0.1
hosts deny = ALL

# 只读共享示例
[readonly]
path = /home/trg/readonly
browseable = yes
writable = no
guest ok = yes

多用户配置

1
2
3
4
5
6
7
8
9
10
# 添加多个用户
sudo useradd -m user2
sudo smbpasswd -a user2

# 创建组共享
sudo groupadd sambashare
sudo usermod -a -G sambashare trg
sudo usermod -a -G sambashare user2
sudo chgrp sambashare /home/shared
sudo chmod 2775 /home/shared

2.7 常见问题

无法访问共享

1
2
3
4
5
6
7
8
# 检查服务状态
sudo systemctl status smbd nmbd

# 重启服务
sudo systemctl restart smbd nmbd

# 检查防火墙
sudo ufw status

权限问题

1
2
3
4
5
6
# 检查目录权限
ls -la /home/trg/Desktop/shared

# 修复权限
sudo chown -R trg:trg /home/trg/Desktop/shared
sudo chmod -R 755 /home/trg/Desktop/shared

Windows访问被拒绝

1
2
3
4
5
6
# 清除Windows凭据缓存
cmdkey /list
cmdkey /delete:ubuntu24

# 重新连接
net use \\ubuntu24\shared /user:trg

网络发现问题

1
2
3
4
5
6
# 启用网络发现
sudo nano /etc/samba/smb.conf
# 在 [global] 部分添加:
local master = yes
preferred master = yes
os level = 65

2.8 监控和维护

查看连接状态

1
2
3
4
5
6
7
8
# 查看当前连接
sudo smbstatus

# 查看共享状态
sudo smbstatus -S

# 查看用户连接
sudo smbstatus -u

日志查看

1
2
3
4
5
6
# 查看Samba日志
sudo tail -f /var/log/samba/log.smbd
sudo tail -f /var/log/samba/log.nmbd

# 查看特定客户端日志
sudo tail -f /var/log/samba/log.192.168.1.100

方案选择建议

SSHFS适用场景

  • 个人开发环境

  • 需要加密传输的场景

  • 临时文件访问

  • 已有SSH服务的环境

  • 对安全性要求较高的场景

SMB适用场景

  • 企业网络环境

  • 需要高性能文件传输

  • 多用户共享访问

  • Windows域环境集成

  • 网络环境对SSH有限制的情况

  • 需要与Windows系统深度集成的场景