linux 轻松挂载远程SMB文件脚本
·
使用Samba(SMB/CIFS)
-
安装cifs-utils
在大多数Linux发行版中,你需要安装cifs-utils包来支持SMB/CIFS协议。
对于基于Debian的系统(如Ubuntu),使用:
sudo apt-get update
sudo apt-get install cifs-utils
-
创建挂载点
选择一个本地目录作为挂载点,如果不存在,则创建它:
sudo mkdir /mnt/smbshare
/mnt/smbshare修改为自定义挂载点。
-
使用凭证文件
创建一个凭证文件:
echo "username=yourusername" > /etc/samba/credentials
echo "password=yourpassword" >> /etc/samba/credentials
chmod 600 /etc/samba/credentials
yourusername修改为需要连接SMB文件的用户名,yourpassword修改为需要连接SMB文件的密码。
创建挂载脚本
-
首先创建脚本文件
sudo nano /usr/local/bin/smb-mount
/usr/local/bin/文件位置不要修改!
-
将以下代码复制到文件中
#!/bin/bash
# SMB 共享挂载管理脚本
# 用法: smb-mount {mount|umount|status|remount}
# 配置变量 - 可以根据需要修改
CREDENTIALS_FILE="/etc/samba/credentials"
MOUNT_OPTIONS="credentials=$CREDENTIALS_FILE,uid=1000,gid=1000,file_mode=0777,dir_mode=0777,sec=ntlmssp,noserverino"
# 定义共享列表:("服务器地址/共享名" "挂载点")
declare -A SHARES=(
["//192.168.1.100/sharename"]="/mnt/smbshare"
#如果需要挂载多个SMB文件,可以继续设置以下内容。
#["//192.168.1.100/sharename"]="/mnt/smbshare"
)
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 打印彩色输出
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
# 检查是否以root权限运行
check_root() {
if [ "$EUID" -ne 0 ]; then
print_error "请使用sudo运行此脚本: sudo $0 $1"
exit 1
fi
}
# 检查凭证文件
check_credentials() {
if [ ! -f "$CREDENTIALS_FILE" ]; then
print_error "凭证文件不存在: $CREDENTIALS_FILE"
print_status "请创建凭证文件,内容格式如下:"
echo "username=你的用户名"
echo "password=你的密码"
echo "domain=WORKGROUP (可选)"
exit 1
fi
if [ $(stat -c %a "$CREDENTIALS_FILE") != "600" ]; then
print_warning "凭证文件权限不安全,正在修复..."
chmod 600 "$CREDENTIALS_FILE"
fi
}
# 创建挂载点目录
create_mountpoints() {
for mountpoint in "${SHARES[@]}"; do
if [ ! -d "$mountpoint" ]; then
print_status "创建挂载点目录: $mountpoint"
mkdir -p "$mountpoint"
chown 1000:1000 "$mountpoint"
fi
done
}
# 挂载所有共享
mount_all() {
check_root "mount"
check_credentials
create_mountpoints
print_status "开始挂载SMB共享..."
for share in "${!SHARES[@]}"; do
mountpoint="${SHARES[$share]}"
# 检查是否已挂载
if mountpoint -q "$mountpoint"; then
print_warning "$share 已经挂载到 $mountpoint"
continue
fi
# 尝试挂载
print_status "挂载 $share 到 $mountpoint"
if mount -t cifs -o "$MOUNT_OPTIONS" "$share" "$mountpoint" 2>/dev/null; then
print_success "$share 挂载成功"
else
print_error "$share 挂载失败"
fi
done
}
# 卸载所有共享
umount_all() {
check_root "umount"
print_status "开始卸载SMB共享..."
for mountpoint in "${SHARES[@]}"; do
# 检查是否已挂载
if mountpoint -q "$mountpoint"; then
print_status "卸载 $mountpoint"
if umount "$mountpoint" 2>/dev/null; then
print_success "$mountpoint 卸载成功"
else
print_warning "$mountpoint 卸载失败,尝试强制卸载..."
umount -f "$mountpoint" 2>/dev/null || umount -l "$mountpoint"
fi
else
print_warning "$mountpoint 未挂载"
fi
done
}
# 查看挂载状态
check_status() {
print_status "当前SMB共享挂载状态:"
echo "----------------------------------------"
for share in "${!SHARES[@]}"; do
mountpoint="${SHARES[$share]}"
if mountpoint -q "$mountpoint"; then
echo -e "${GREEN}✓${NC} $share -> $mountpoint ${GREEN}(已挂载)${NC}"
else
echo -e "${RED}✗${NC} $share -> $mountpoint ${RED}(未挂载)${NC}"
fi
done
echo "----------------------------------------"
# 显示所有CIFS挂载
if mount | grep -q cifs; then
print_status "系统当前所有CIFS挂载:"
mount | grep cifs
fi
}
# 重新挂载
remount_all() {
umount_all
sleep 2
mount_all
}
# 显示用法
show_usage() {
echo "SMB共享挂载管理脚本"
echo "用法: $0 {mount|umount|status|remount|help}"
echo ""
echo "命令:"
echo " mount 挂载所有SMB共享"
echo " umount 卸载所有SMB共享"
echo " status 查看挂载状态"
echo " remount 重新挂载所有共享"
echo " help 显示帮助信息"
echo ""
echo "配置的共享:"
for share in "${!SHARES[@]}"; do
echo " $share -> ${SHARES[$share]}"
done
}
# 主程序
case "$1" in
"mount")
mount_all
;;
"umount")
umount_all
;;
"status")
check_status
;;
"remount")
remount_all
;;
"help"|"-h"|"--help")
show_usage
;;
*)
if [ -z "$1" ]; then
show_usage
else
print_error "未知命令: $1"
show_usage
exit 1
fi
;;
esac
-
保存文件后,设置执行权限
sudo chmod +x /usr/local/bin/smb-mount
使用方法
现在你可以使用这个脚本方便地管理SMB挂载:
🔹 挂载所有共享
sudo smb-mount mount
🔹 卸载所有共享
sudo smb-mount umount
🔹 查看挂载状态
sudo smb-mount status
# 或者普通用户也可以查看状态
smb-mount status
🔹 重新挂载
sudo smb-mount remount
🔹 显示帮助信息
smb-mount help
如果需要开机自动挂载
🔹方法1
-
虽然脚本用于手动管理,但你也可以创建systemd服务来实现开机自动挂载:
#创建系统服务
sudo nano /etc/systemd/system/smb-mount.service
-
添加以下内容:
[Unit]Description=Mount SMB
SharesAfter=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/smb-mount
mountExecStop=/usr/local/bin/smb-mount
umountRemainAfterExit=yes
[Install]WantedBy=multi-user.target
- 然后启用服务:
sudo systemctl enable smb-mount.service
sudo systemctl start smb-mount.service
这样你的SMB共享就会在系统启动时自动挂载了!
🔹方法2
- 创建.desktop文件
sudo nano /etc/xdg/autostart/autoSMB.desktop
- 添加以下内容:
[Desktop Entry]
Version=1.0
Type=Application
Name=autoSMB
Exec=sudo smb-mount mount
Path=/
Terminal=false
StartupNotify=false
这样你的SMB共享就会在系统启动时自动挂载了!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)