本文目录导读:

基于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 "$@"
使用说明
-
保存脚本:将脚本保存为
mount_remote.sh -
添加执行权限:
chmod +x mount_remote.sh
-
安装依赖:
# SSHFS sudo apt-get install sshfs # NFS sudo apt-get install nfs-common # Samba sudo apt-get install cifs-utils
-
配置参数:根据实际情况修改脚本中的配置
-
执行脚本:
./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
这些脚本提供了灵活的远程目录挂载解决方案,您可以根据实际需求选择使用。