Linux 配置Samba,Windows登录,开机自动映射登录

Linux 配置Samba,Windows登录,开机自动登录

以下脚本均经过个人验证。

一、Linux 侧:安装 Samba

1️⃣ 安装(Ubuntu / Debian 系)

bash 复制代码
sudo apt update
sudo apt install -y samba

安装完成后会有两个核心服务:

  • smbd:文件共享
  • nmbd:NetBIOS(名字发现,可选)

确认服务状态:

bash 复制代码
systemctl status smbd

二、准备共享目录

1️⃣ 创建目录

bash 复制代码
sudo mkdir -p /srv/samba/share

2️⃣ 设置权限(示例:给某个用户)

假设 Linux 用户是 yourusername(你可以换成实际用户名):

bash 复制代码
sudo chown -R yourusername:yourusername /srv/samba/share
chmod 755 /srv/samba/share

⚠️ 不建议直接 777,除非只是临时测试


三、配置 Samba

1️⃣ 备份原配置

bash 复制代码
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

2️⃣ 编辑配置文件

bash 复制代码
sudo vim /etc/samba/smb.conf
(1)全局配置(通常已经有)

确认或修改以下内容:

ini 复制代码
[global]
   workgroup = WORKGROUP
   security = user
   map to guest = bad user
  • WORKGROUP 要和 Windows 一致(默认就是这个)
  • security = user 是最常用模式

(2)添加共享配置

在文件末尾添加:

ini 复制代码
[share]
   comment = Samba Share
   path = /srv/samba/share
   browseable = yes
   writable = yes
   valid users = yourusername
   create mask = 0644
   directory mask = 0755

四、Samba 用户配置(⚠️非常关键)

Samba 用户 ≠ Linux 用户,需要单独设置

1️⃣ 确认 Linux 用户存在

bash 复制代码
id yourusername

没有的话创建:

bash 复制代码
sudo useradd -m yourusername
sudo passwd yourusername

2️⃣ 添加 Samba 用户

bash 复制代码
sudo smbpasswd -a yourusername

按提示输入密码(Windows 登录时用这个密码

启用用户:

bash 复制代码
sudo smbpasswd -e yourusername

五、重启服务并放行防火墙

1️⃣ 重启 Samba

bash 复制代码
sudo systemctl restart smbd nmbd

2️⃣ 防火墙(如果启用了 UFW)

bash 复制代码
sudo ufw allow samba
sudo ufw reload

六、Windows 侧访问 Samba

方法一:资源管理器(最常用)

在 Windows 文件管理器地址栏输入:

复制代码
\\<Linux_IP>\share

例如:

复制代码
\\192.168.1.100\share

方法二:映射网络驱动器(推荐)

  1. 打开 此电脑

  2. 右键 → 映射网络驱动器

  3. 文件夹填写:

    复制代码
    \\192.168.1.100\share
  4. 勾选 使用其他凭据连接

  5. 用户名输入:

    复制代码
    yourusername
  6. 密码:smbpasswd 设置的密码


七、常见问题 & 排查(工程常用)

1️⃣ Windows 提示"无访问权限"

  • 确认 Samba 用户存在:

    bash 复制代码
    pdbedit -L
  • 检查 valid users

  • 检查目录 Linux 权限:

    bash 复制代码
    ls -ld /srv/samba/share

2️⃣ Windows 能看到但进不去

多半是 Linux 文件系统权限问题

bash 复制代码
sudo -u yourusername touch /srv/samba/share/test

失败说明不是 Samba 问题,是 Linux 权限问题。


3️⃣ Windows 10 / 11 连接失败(协议问题)

查看 Samba 版本:

bash 复制代码
smbd --version

如遇老系统,可在 [global] 中指定:

ini 复制代码
server min protocol = SMB2

4️⃣ 查看 Samba 日志(非常重要)

bash 复制代码
journalctl -u smbd -f

或:

bash 复制代码
ls /var/log/samba/

八、最小可用配置总结(TL;DR)

Linux:

bash 复制代码
apt install samba
mkdir /srv/samba/share
smbpasswd -a yourusername

smb.conf

ini 复制代码
[share]
path = /srv/samba/share
writable = yes
valid users = yourusername

Windows:

复制代码
\\Linux_IP\share

九、配置自动登录

✅ 方案一:用 Windows「映射网络驱动器 + 记住凭据」

这是最标准、最稳的方式。

操作步骤
  1. 打开 此电脑

  2. 右键 → 映射网络驱动器

  3. 选择盘符(例如 Z:

  4. 文件夹填:

    复制代码
    \\ipaddress\share

    或:

    复制代码
    \\<WSL_IP>\share
  5. ✅ 勾选:

    • 登录时重新连接
    • 使用其他凭据连接
  6. 点击完成

  7. 输入:

    • 用户名:yourusername
    • 密码:Samba 密码
    • 勾选 记住我的凭据

👉 这样 Windows 会:

  • 开机自动尝试 reconnect
  • 凭据保存在 凭据管理器

如果你想"强制 100% 自动挂载"(工程级)

有些情况下(WSL 启动慢、网络慢),GUI 自动映射会失败。

✅ 方案二:登录脚本 + net use

1️⃣ 创建脚本

例如:C:\scripts\map_samba.cmd

内容:

bat 复制代码
@echo off
net use Z: \\ipaddress\share /user:yourusername <Samba密码> /persistent:yes

⚠️ 密码明文,不适合多人环境

单人开发机 OK


2️⃣ 加到开机启动
  • Win + R

  • 输入:

    复制代码
    shell:startup
  • map_samba.cmd 放进去

👉 每次登录都会强制重新映射


推荐的"更安全版本"(不写明文密码)

凭据管理器 + net use

1️⃣ 先存凭据
powershell 复制代码
cmdkey /add:ipaddress /user:yourusername /pass

输入密码(只输入一次)


2️⃣ 脚本里不写密码
bat 复制代码
net use Z: \\ipaddress\share /persistent:yes

WSL 场景下的"稳定性建议"(非常重要)

⚠️ 确保 WSL 在映射前启动

如果你发现 开机后第一次访问失败,可以:

方法 A(推荐)

在启动脚本前加一句:

bat 复制代码
wsl.exe -d Ubuntu -e true

完整示例:

bat 复制代码
@echo off
wsl.exe -d Ubuntu -e true
net use Z: \\ipaddress\share /persistent:yes
相关推荐
秋天枫叶352 小时前
【k8s集群Docker + cri-dockerd】服务器重启或关机后 apiserver/controller/scheduler 无法自动恢复
linux·运维·服务器·容器·kubernetes·bug
赋创小助手2 小时前
超微2U高密度服务器AS-2126HS-TN评测(双AMD EPYC 9005 Turin)
运维·服务器·人工智能·深度学习·神经网络·自然语言处理·架构
松涛和鸣2 小时前
59、 IMX6ULL按键驱动开发:轮询到中断的实现
linux·服务器·c语言·arm开发·数据库·驱动开发
LcVong2 小时前
C# 基于MemoryMappedFile实现进程间通信(服务端+客户端完整范例)
linux·服务器·c#
晴天飛 雪2 小时前
Spring Boot 接口耗时统计
前端·windows·spring boot
河码匠2 小时前
namespace 网络命名空间、使用网络命名空间实现虚拟路由
linux·网络
真的想上岸啊2 小时前
3、用SSH方式登录板子
linux
开开心心就好2 小时前
打印机驱动搜索下载工具,自动识别手动搜
java·linux·开发语言·网络·stm32·物联网·电脑
狂放不羁霸2 小时前
Tailscale | 校园网外笔记本借助校园网内主机连接实验室服务器
运维·服务器·vscode