1410 字
7 分钟
macOS 开机自动挂载 NAS 脚本分享

项目来源#

前段时间购买了MacBook Air,发现想要挂载NAS需要手动挂载,不能自动挂载。与AI对话后,编写了一个自动挂载脚本,现分享出来以帮助有类似需求的用户。

1. 准备工作#

1.1 创建脚本文件#

  1. 在您的主目录下创建脚本文件夹:

    Terminal window
    mkdir -p ~/Tools/Scripts
  2. 创建脚本文件:

    Terminal window
    nano ~/Tools/Scripts/mount_nas.sh
  3. 将脚本代码复制粘贴到文件中,根据自己的需求修改配置,然后保存并退出。

#!/bin/bash
exec &> "${HOME}/Tools/Scripts/mount_nas_log.txt"
# ==============================================================================
# --- 开机自动挂载脚本 (在用户主目录创建挂载点) ---
# ==============================================================================
# --- 配置区 ---
# 格式: "昵称;服务器IP/路径;用户名"
CONFIGS=(
"nas;192.168.10.1/onecreeper_nas;username"
)
# --- 准备工作 ---
# 定义挂载点基准目录 (在用户主目录下)
BASE_MOUNT_DIR="${HOME}/Mounts"
echo "将在 ${BASE_MOUNT_DIR} 中创建挂载点..."
mkdir -p "${BASE_MOUNT_DIR}" # -p 选项确保目录不存在时才创建,存在亦不报错
# --- 网络检查 ---
UNIQUE_SERVERS=$(for config in "${CONFIGS[@]}"; do echo "$config" | cut -d';' -f2 | cut -d'/' -f1; done | sort -u)
declare -a REACHABLE_SERVERS=()
echo "正在检查所有 NAS/服务器是否在线..."
for SERVER_IP in $UNIQUE_SERVERS; do
echo -n "正在检查服务器: $SERVER_IP... "
if ping -c 2 -W 1 $SERVER_IP &> /dev/null; then
echo "✅ 在线"
REACHABLE_SERVERS+=("$SERVER_IP")
else
echo "❌ 超时"
fi
done
echo "服务器在线状态检查完毕。"
# --- 挂载逻辑 ---
for config in "${CONFIGS[@]}"; do
IFS=';' read -r NICKNAME FULL_PATH USERNAME <<< "$config"
SERVER_IP=$(echo $FULL_PATH | cut -d'/' -f1)
# 使用用户主目录下的挂载点
MOUNT_POINT="${BASE_MOUNT_DIR}/${NICKNAME}"
IS_SERVER_REACHABLE=false
for item in "${REACHABLE_SERVERS[@]}"; do [[ "$item" == "$SERVER_IP" ]] && IS_SERVER_REACHABLE=true && break; done
if ! $IS_SERVER_REACHABLE; then
echo "⏭️ 跳过挂载 '$NICKNAME' (服务器不可达)"
continue
fi
echo "----------------------------------------"
echo "正在处理共享: $NICKNAME"
# 自动创建挂载点文件夹
mkdir -p "${MOUNT_POINT}"
if mount | grep -q " on ${MOUNT_POINT} "; then
echo "状态:已挂载。"
continue
fi
NAS_PASSWORD=$(security find-internet-password -s "$SERVER_IP" -a "$USERNAME" -w)
if [ -z "$NAS_PASSWORD" ]; then
echo "❌ 错误:未能在钥匙串中找到 '$USERNAME@$SERVER_IP' 的密码。"
continue
fi
echo "正在尝试挂载到 ${MOUNT_POINT}"
if [[ "$USERNAME" == *"@"* ]]; then
# 对用户名进行URL编码
ENCODED_USERNAME=$(echo "$USERNAME" | sed 's/@/%40/g')
echo "提示: 检测到包含'@'的用户名,已自动编码为: ${ENCODED_USERNAME}"
mount_smbfs -N "//${ENCODED_USERNAME}:${NAS_PASSWORD}@${FULL_PATH}" "${MOUNT_POINT}"
else
# 对于不含'@'的标准用户名,使用原始命令
mount_smbfs -N "//${USERNAME}:${NAS_PASSWORD}@${FULL_PATH}" "${MOUNT_POINT}"
fi
if [ $? -eq 0 ]; then
echo "✅ 成功挂载。"
else
echo "❌ 挂载失败。请检查网络、服务器状态、密码,或Windows端的共享/防火墙设置。"
fi
done
echo "----------------------------------------"
echo "所有挂载任务已执行完毕。"
exit 0

1.2 设置脚本权限#

给脚本添加执行权限:

Terminal window
chmod +x ~/Tools/Scripts/mount_nas.sh

1.3 配置NAS密码#

脚本使用macOS的钥匙串来安全存储NAS密码。您需要为每个NAS服务器和用户名组合添加密码到钥匙串:

  1. 打开“访达”
  2. 左上角-前往-连接服务器
  3. 输入你的nas地址账号密码,勾选记住密码之类的提示就会自动保存到密钥串中了

2. 测试脚本#

在设置自动运行之前,先手动测试脚本是否正常工作:

Terminal window
~/Tools/Scripts/mount_nas.sh

检查输出和日志文件 ~/Tools/Scripts/mount_nas_log.txt,确认所有NAS共享文件夹都已成功挂载到 ~/Mounts 目录下。

3. 设置开机自动运行#

使用自动操作将脚本变为程序#

  1. 打开自动操作
  2. 新建文稿 > 应用程序
  3. 搜索”运行shell脚本”
  4. 脚本填入 Bash /Tools/Scripts/mount_nas.sh

使用登录项(用户级)#

  1. 打开”系统偏好设置” > “用户与群组”
  2. 选择您的用户账户,点击”登录项”选项卡
  3. 点击左下角的锁图标并输入密码进行解锁
  4. 点击”+“按钮添加登录项
  5. 在文件选择对话框中,选择您刚刚创建的自动操作程序
  6. 确保新添加的登录项旁边的复选框已选中

此方法会在您登录用户账户时自动运行脚本。

4. 验证自动挂载#

重启您的MacBook,登录后检查:

  1. 打开Finder,查看侧边栏是否出现挂载的NAS共享文件夹
  2. 检查~/Mounts目录,确认所有NAS共享文件夹都已挂载
  3. 查看日志文件~/Tools/Scripts/mount_nas_log.txt,确认脚本运行正常

常见问题与解决方案#

1. 挂载失败:密码错误#

如果日志显示”未能在钥匙串中找到密码”的错误,请检查:

  • 确保已在钥匙串中正确添加了NAS服务器的密码
  • 检查服务器IP地址和用户名是否与钥匙串中的记录完全匹配
  • 尝试手动运行security find-internet-password -s "服务器IP" -a "用户名" -w命令,确认能获取到密码

2. 挂载失败:网络问题#

如果日志显示服务器不可达或挂载超时,请检查:

  • 确保MacBook和NAS在同一网络中
  • 检查NAS设备是否正常运行
  • 确认NAS的IP地址没有变化
  • 检查网络防火墙设置

3. 特殊字符用户名问题#

如果您的用户名包含特殊字符(特别是”@”),脚本会自动处理。但如果仍遇到问题,您可以:

  • 手动对用户名进行URL编码(将”@“替换为”%40”)
  • 考虑在NAS/Windows上创建一个不含特殊字符的专用账户用于挂载

4. 挂载点权限问题#

如果挂载成功但无法访问文件,可能是权限问题:

  • 检查NAS上的共享权限设置
  • 确保MacBook用户有足够的访问权限
  • 尝试手动挂载并指定权限选项,如mount_smbfs -N -o nobrowse "//user:pass@server/share" ~/Mounts/share

AI提问解决法#

你去问问ai把,很强的。

macOS 开机自动挂载 NAS 脚本分享
https://blog.st.onecreeper.cn/posts/macbook自动挂载nas脚本/
作者
一只 creeper
发布于
2025-09-13
许可协议
CC BY-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

最后更新于 ,距今已过 353

部分内容可能已过时