如何编写挂载访问远程目录脚本

wen 实用脚本 32

本文目录导读:

如何编写挂载访问远程目录脚本

  1. 基于SSHFS的远程目录挂载脚本
  2. NFS远程挂载脚本
  3. Samba/CIFS挂载脚本
  4. 完整的智能挂载管理脚本
  5. 使用说明
  6. 自动挂载(/etc/fstab)

基于SSHFS的远程目录挂载脚本

#!/bin/bash
# SSHFS远程目录挂载脚本
# 使用前需要安装: sudo apt-get install sshfs
# 配置参数
REMOTE_USER="your_username"
REMOTE_HOST="192.168.1.100"
REMOTE_PATH="/home/your_username/remote_folder"
LOCAL_MOUNT="/mnt/remote"
SSH_PORT=22
SSH_KEY="~/.ssh/id_rsa"  # 可选:使用SSH密钥
# 创建挂载点
mkdir -p "$LOCAL_MOUNT"
# 挂载命令
if [ -f "$SSH_KEY" ]; then
    # 使用密钥认证
    sshfs -o allow_other,default_permissions,port=$SSH_PORT,IdentityFile=$SSH_KEY \
          $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH \
          $LOCAL_MOUNT
else
    # 使用密码认证(需要安装sshpass)
    # read -sp "请输入SSH密码: " SSH_PASS
    # export SSHPASS=$SSH_PASS
    # sshfs -o allow_other,default_permissions,password_stdin \
    #       $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH \
    #       $LOCAL_MOUNT
    # 或手动输入密码
    sshfs $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH $LOCAL_MOUNT
fi
# 检查挂载状态
if mountpoint -q "$LOCAL_MOUNT"; then
    echo "✅ 远程目录已成功挂载到 $LOCAL_MOUNT"
    echo "📊 挂载信息:"
    df -h "$LOCAL_MOUNT"
else
    echo "❌ 挂载失败,请检查配置"
    exit 1
fi

NFS远程挂载脚本

#!/bin/bash
# NFS远程目录挂载脚本
# 服务端需要配置NFS服务:sudo apt-get install nfs-kernel-server
# 配置参数
NFS_SERVER="192.168.1.100"
NFS_PATH="/export/data"
LOCAL_MOUNT="/mnt/nfs_remote"
MOUNT_OPTIONS="rw,hard,intr,vers=4"
# 创建挂载点
mkdir -p "$LOCAL_MOUNT"
# 检查NFS是否可用
echo "检查NFS服务器连接..."
if ! rpcinfo -s $NFS_SERVER &>/dev/null 2>&1; then
    echo "⚠️ 无法连接到NFS服务器 $NFS_SERVER"
    exit 1
fi
# 执行挂载
mount -t nfs -o $MOUNT_OPTIONS \
      $NFS_SERVER:$NFS_PATH $LOCAL_MOUNT
# 验证挂载
if mountpoint -q "$LOCAL_MOUNT"; then
    echo "✅ NFS目录已成功挂载"
    mount | grep "$LOCAL_MOUNT"
else
    echo "❌ 挂载失败,检查:/var/log/syslog"
    exit 1
fi

Samba/CIFS挂载脚本

#!/bin/bash
# Samba/CIFS远程目录挂载脚本
# 需要安装:sudo apt-get install cifs-utils
# 配置参数
SAMBA_SERVER="192.168.1.100"
SAMBA_SHARE="shared_folder"
SAMBA_USER="windows_user"
SAMBA_DOMAIN="WORKGROUP"  # 可选
LOCAL_MOUNT="/mnt/samba_remote"
PASSWORD_FILE="/etc/samba/auth.creds"  # 密码文件
# 创建密码文件(首次使用时)
if [ ! -f "$PASSWORD_FILE" ]; then
    read -sp "请输入Samba密码: " SAMBA_PASS
    echo
    echo "username=$SAMBA_USER" | sudo tee $PASSWORD_FILE
    echo "password=$SAMBA_PASS" | sudo tee -a $PASSWORD_FILE
    echo "domain=$SAMBA_DOMAIN" | sudo tee -a $PASSWORD_FILE
    sudo chmod 600 $PASSWORD_FILE
fi
# 创建挂载点
sudo mkdir -p "$LOCAL_MOUNT"
# 执行挂载
sudo mount -t cifs \
     -o credentials=$PASSWORD_FILE,iocharset=utf8,file_mode=0644,dir_mode=0755 \
     //$SAMBA_SERVER/$SAMBA_SHARE $LOCAL_MOUNT
# 验证
if [ $? -eq 0 ]; then
    echo "✅ Samba目录已成功挂载到 $LOCAL_MOUNT"
    echo "📊 挂载信息:"
    mount | grep cifs
else
    echo "❌ 挂载失败"
    exit 1
fi

完整的智能挂载管理脚本

#!/bin/bash
# 智能远程目录挂载管理脚本
# 支持多种协议,自动检测可用性
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 配置
declare -A REMOTE_CONFIG=(
    ["SSHFS_HOST"]="192.168.1.100"
    ["SSHFS_USER"]="user1"
    ["SSHFS_REMOTE"]="/home/user1/data"
    ["NFS_SERVER"]="192.168.1.101"
    ["NFS_EXPORT"]="/export"
    ["SAMBA_SERVER"]="192.168.1.102"
    ["SAMBA_SHARE"]="shared"
    ["SAMBA_USER"]="user2"
    ["LOCAL_BASE"]="/mnt"
)
# 日志函数
log() {
    local level=$1
    local msg=$2
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    case $level in
        "INFO") echo -e "${GREEN}[${timestamp}] ${msg}${NC}" ;;
        "WARN") echo -e "${YELLOW}[${timestamp}] WARNING: ${msg}${NC}" ;;
        "ERROR") echo -e "${RED}[${timestamp}] ERROR: ${msg}${NC}" ;;
        "DEBUG") echo "[${timestamp}] DEBUG: ${msg}" ;;
    esac
}
# 检查依赖
check_dependencies() {
    local deps=("sshfs" "mount" "df" "grep")
    for dep in "${deps[@]}"; do
        if ! command -v $dep &>/dev/null; then
            log "ERROR" "缺少依赖: $dep"
            log "INFO" "请安装: sudo apt-get install $dep"
            return 1
        fi
    done
}
# SSHFS挂载
mount_sshfs() {
    local label="sshfs_${REMOTE_CONFIG[SSHFS_HOST]}"
    local local_path="${REMOTE_CONFIG[LOCAL_BASE]}/$label"
    mkdir -p "$local_path"
    log "INFO" "尝试SSHFS挂载: ${REMOTE_CONFIG[SSHFS_USER]}@${REMOTE_CONFIG[SSHFS_HOST]}"
    sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 \
          ${REMOTE_CONFIG[SSHFS_USER]}@${REMOTE_CONFIG[SSHFS_HOST]}:${REMOTE_CONFIG[SSHFS_REMOTE]} \
          "$local_path" 2>/dev/null
    if mountpoint -q "$local_path"; then
        log "INFO" "✅ SSHFS挂载成功: $local_path"
        return 0
    else
        log "WARN" "SSHFS挂载失败"
        return 1
    fi
}
# NFS挂载
mount_nfs() {
    local label="nfs_${REMOTE_CONFIG[NFS_SERVER]}"
    local local_path="${REMOTE_CONFIG[LOCAL_BASE]}/$label"
    mkdir -p "$local_path"
    log "INFO" "尝试NFS挂载: ${REMOTE_CONFIG[NFS_SERVER]}:${REMOTE_CONFIG[NFS_EXPORT]}"
    mount -t nfs -o hard,intr,rsize=32768,wsize=32768 \
          ${REMOTE_CONFIG[NFS_SERVER]}:${REMOTE_CONFIG[NFS_EXPORT]} \
          "$local_path" 2>/dev/null
    if mountpoint -q "$local_path"; then
        log "INFO" "✅ NFS挂载成功: $local_path"
        return 0
    else
        log "WARN" "NFS挂载失败"
        return 1
    fi
}
# Samba挂载
mount_samba() {
    local label="samba_${REMOTE_CONFIG[SAMBA_SERVER]}"
    local local_path="${REMOTE_CONFIG[LOCAL_BASE]}/$label"
    mkdir -p "$local_path"
    read -sp "请输入Samba密码: " samba_pass
    echo
    log "INFO" "尝试Samba挂载: //${REMOTE_CONFIG[SAMBA_SERVER]}/${REMOTE_CONFIG[SAMBA_SHARE]}"
    mount -t cifs -o username=${REMOTE_CONFIG[SAMBA_USER]},password=$samba_pass,iocharset=utf8 \
          //${REMOTE_CONFIG[SAMBA_SERVER]}/${REMOTE_CONFIG[SAMBA_SHARE]} \
          "$local_path" 2>/dev/null
    if mountpoint -q "$local_path"; then
        log "INFO" "✅ Samba挂载成功: $local_path"
        return 0
    else
        log "WARN" "Samba挂载失败"
        return 1
    fi
}
# 主函数
main() {
    echo "=================================="
    echo " 远程目录挂载工具 v1.0"
    echo "=================================="
    # 检查依赖
    check_dependencies || exit 1
    # 选择挂载方式
    echo "请选择挂载方式:"
    echo "1) SSHFS (SSH文件系统)"
    echo "2) NFS (网络文件系统)"
    echo "3) Samba/CIFS"
    echo "4) 全部尝试"
    read -p "选择 [1-4]: " choice
    case $choice in
        1) mount_sshfs ;;
        2) mount_nfs ;;
        3) mount_samba ;;
        4)
            mount_sshfs
            mount_nfs
            mount_samba
            ;;
        *) log "ERROR" "无效选择" ;;
    esac
    # 显示挂载状态
    echo -e "\n📊 当前挂载状态:"
    mount | grep -E "(sshfs|nfs|cifs)" | while read line; do
        echo -e "${GREEN}$line${NC}"
    done
}
# 执行主函数
main "$@"

使用说明

  1. 保存脚本:将脚本保存为 mount_remote.sh

  2. 添加执行权限

    chmod +x mount_remote.sh
  3. 安装依赖

    # SSHFS
    sudo apt-get install sshfs
    # NFS
    sudo apt-get install nfs-common
    # Samba
    sudo apt-get install cifs-utils
  4. 配置参数:根据实际情况修改脚本中的配置

  5. 执行脚本

    ./mount_remote.sh

自动挂载(/etc/fstab)

/etc/fstab 实现开机自动挂载:

# SSHFS
sshfs#user@host:/remote/path /mnt/local fuse defaults,allow_other,_netdev 0 0
# NFS
server:/export/path /mnt/local nfs defaults,_netdev 0 0
# Samba
//server/share /mnt/local cifs username=user,password=pass,_netdev 0 0

这些脚本提供了灵活的远程目录挂载解决方案,您可以根据实际需求选择使用。

抱歉,评论功能暂时关闭!