elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [APORTE] [Bash] (Linux) VMWare: Montar / Desmontar 'Shared Folders'
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [APORTE] [Bash] (Linux) VMWare: Montar / Desmontar 'Shared Folders'  (Leído 2,075 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.946



Ver Perfil
[APORTE] [Bash] (Linux) VMWare: Montar / Desmontar 'Shared Folders'
« en: 4 Junio 2025, 21:09 pm »

Los siguientes dos scripts, desarrollados en el lenguaje Bash, y que se deben usar bajo un sistema operativo Linux en una máquina virtual de VMWare (aunque se pueden modificar para Virtual Box), sirven como atajo para montar y desmontar las "carpetas compartidas" (shared folders) de forma sencilla.

Utilizar estos scripts nos ahorra un valioso tiempo al no tener que usar comandos específicos en la distro de Linux para llevar a cabo el montaje de las carpetas compartidas de VMWare y de forma repetitiva (ya que el montaje no es persistente).

La idea tras esta simple herramienta es eso, ahorrar tiempo, y de esta manera, mediante el script de desmontaje, poder aislar la máquina virtual del sistema operativo anfitrión impidiendo el acceso a las carpetas compartidas, y volver a habilitar el acceso, tan solo haciendo dos clicks para ejecutar estos scripts.

 

Estos scripts son un equivalente de estos otros para Windows:

  — Tema: [APORTE] [VBS] VMWare: Mount / Unmount Shared Folders Network Drive

Sin embargo, en esta ocasión estos scripts que comparto están programados en el idioma español, e incluyen emojis. Para ser honestos yo no tengo experiencia con Bash, así que básicamente lo ha hecho casi todo ChatGPT, yo solo le di unas pinceladas.

Mount_VMWare_Shared_Folders.sh
Código:
#!/bin/bash

# Carpeta a montar: VMWare Shared Folders (".host:/" = todas las carpetas)
# Destino: "/mnt/shared_folders"
MOUNT_SOURCE=".host:/"
MOUNT_DESTINATION="/mnt/shared_folders"

# =========================================
# Montar las carpetas compartidas de VMWare
# =========================================

# Crear /mnt/shared_folders si no existe
if [ ! -d "$MOUNT_DESTINATION" ]; then
    echo "📂 Creando carpeta $MOUNT_DESTINATION... 🔥"
    sudo mkdir -p "$MOUNT_DESTINATION"
fi

# Verificar si ya está montado en /mnt/shared_folders
if mountpoint -q "$MOUNT_DESTINATION"; then
    echo "⚠️ $MOUNT_DESTINATION ya está montado."
else
    echo "🔗 Montando carpeta compartida VMWare en $MOUNT_DESTINATION..."
    sudo vmhgfs-fuse "$MOUNT_SOURCE" "$MOUNT_DESTINATION" -o allow_other
    if [ $? -ne 0 ]; then
        echo "❌ Error montando la carpeta compartida. Abortando... 💔"
        exit 1
    fi
    echo "✅ Montaje exitoso de carpeta compartida VMWare en $MOUNT_DESTINATION."
fi

# ====================================================================
# Crear enlace simbólico de las carpetas compartidas, en el escritorio
# ====================================================================

# Detectar ruta del escritorio usando user-dirs.dirs (XDG estándar)
DESKTOP_DIR=""

# Leer archivo de configuración XDG si existe
if [ -f "$HOME/.config/user-dirs.dirs" ]; then
    DESKTOP_DIR=$(grep XDG_DESKTOP_DIR "$HOME/.config/user-dirs.dirs" | cut -d= -f2 | tr -d \")
fi

# Si no lo encontró o está vacío, probar las carpetas comunes
if [ -z "$DESKTOP_DIR" ]; then
    if [ -d "$HOME/Desktop" ]; then
        DESKTOP_DIR="$HOME/Desktop"
    elif [ -d "$HOME/Escritorio" ]; then
        DESKTOP_DIR="$HOME/Escritorio"
    else
        echo "⚠️ No se pudo detectar la ubicación de la carpeta Desktop / Escritorio. Abortando... 😢"
        exit 1
    fi
else
    # Eliminar $HOME si está en la ruta para expandirla bien
    DESKTOP_DIR="${DESKTOP_DIR/#\$HOME/$HOME}"
fi

# Definir origen y destino
LINK_DESTINATION="$DESKTOP_DIR/VMWare Shared Folders"

# Crear enlace simbólico solo si no existe ya.
if [ -L "$LINK_DESTINATION" ] || [ -e "$LINK_DESTINATION" ]; then
    echo "⚠️ El enlace o archivo '$LINK_DESTINATION' ya existe. No se creará un nuevo enlace."
else
    ln -s "$MOUNT_DESTINATION" "$LINK_DESTINATION"
    echo "✅ Enlace simbólico creado en: $LINK_DESTINATION 🎉"
fi

echo -e "\n🏁 Operación finalizada."

Dismount_VMWare_Shared_Folders.sh
Código:
#!/bin/bash

# Ruta de montaje de las carpetas compartidas de VMware
MOUNT_DESTINATION="/mnt/shared_folders"

echo "🔍 Verificando si está montado $MOUNT_DESTINATION..."

if mountpoint -q "$MOUNT_DESTINATION"; then
    echo "📤 Desmontando carpeta compartida de VMware de: $MOUNT_DESTINATION..."
    sudo umount "$MOUNT_DESTINATION"
    if [ $? -eq 0 ]; then
        echo "✅ Carpeta compartida desmontada correctamente. 🎉"
    else
        echo "❌ Error al desmontar $MOUNT_DESTINATION. ¿Está en uso? 💔"
        exit 1
    fi
else
    echo "⚠️ $MOUNT_DESTINATION no está montado actualmente."
    if [ -d "$MOUNT_DESTINATION" ]; then
        echo "ℹ️ La carpeta existe, pero no contiene un punto de montaje activo."
    else
        echo "🚫 La carpeta $MOUNT_DESTINATION no existe."
    fi
fi

echo -e "\n🏁 Operación finalizada."

PD: parece que SMF no se lleva bien con los emojis, pierden el formato al usar la etiqueta "Bash" en el bloque de código.


« Última modificación: 4 Junio 2025, 21:13 pm por Eleкtro » En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.946



Ver Perfil
Re: [APORTE] [Bash] (Linux) VMWare: Montar / Desmontar 'Shared Folders'
« Respuesta #1 en: 8 Junio 2025, 14:39 pm »

No puedo editar el post principal, así que... aquí les dejo los mismos scripts, con ligeras mejoras y en inglés:

Mount_VMWare_Shared_Folders.sh
Código:
#!/bin/bash

###############################################################################
#                              CONFIGURATION                                  #
###############################################################################

# Folder to mount: VMWare Shared Folders (".host:/" = all folders)
MOUNT_SOURCE=".host:/"
MOUNT_DESTINATION="/mnt/shared_folders"

###############################################################################
#                            MAIN SCRIPT EXECUTION                            #
###############################################################################

# =========================================
# Mount VMWare shared folders
# =========================================

# Create /mnt/shared_folders if it doesn't exist
if [ ! -d "$MOUNT_DESTINATION" ]; then
    echo "📂 Creating folder $MOUNT_DESTINATION..."
    sudo mkdir -p "$MOUNT_DESTINATION"
fi

# Check if already mounted at /mnt/shared_folders
if mountpoint -q "$MOUNT_DESTINATION"; then
    echo "🚫 $MOUNT_DESTINATION is already mounted."
else
    echo "🔗 Mounting VMWare shared folder at $MOUNT_DESTINATION..."
    sudo vmhgfs-fuse "$MOUNT_SOURCE" "$MOUNT_DESTINATION" -o allow_other
    if [ $? -ne 0 ]; then
        echo "❌ Error mounting shared folder. Aborting..."
        exit 1
    fi
    echo "✅ Successfully mounted VMWare shared folder at $MOUNT_DESTINATION."
fi

# ====================================================================
# Create symbolic link to the shared folders on the Desktop
# ====================================================================

# Detect desktop path using user-dirs.dirs (XDG standard)
DESKTOP_DIR="$(xdg-user-dir DESKTOP)"

# Define source and destination for the link
LINK_DESTINATION="$DESKTOP_DIR/VMWare Shared Folders"

# Create symbolic link only if it doesn't already exist
if [ -L "$LINK_DESTINATION" ] || [ -e "$LINK_DESTINATION" ]; then
    echo "🚫 The link or file '$LINK_DESTINATION' already exists. No new link will be created."
else
    ln -s "$MOUNT_DESTINATION" "$LINK_DESTINATION"
    echo "✅ Symbolic link created at: $LINK_DESTINATION"
fi

echo -e "\n🏁 Operation completed."
echo
read -n1 -r -s -p "Press any key to finish..."
echo

Dismount_VMWare_Shared_Folders.sh
Código:
#!/bin/bash

###############################################################################
#                              CONFIGURATION                                  #
###############################################################################

# Mount path for VMware shared folders
MOUNT_DESTINATION="/mnt/shared_folders"

###############################################################################
#                            MAIN SCRIPT EXECUTION                            #
###############################################################################

echo "🔍 Checking if $MOUNT_DESTINATION is mounted..."

if mountpoint -q "$MOUNT_DESTINATION"; then
    echo "📤 Dismounting VMware shared folder from: $MOUNT_DESTINATION..."
    sudo umount "$MOUNT_DESTINATION"
    if [ $? -eq 0 ]; then
        echo "✅ Shared folder successfully unmounted."
    else
        echo "❌ Error unmounting $MOUNT_DESTINATION. Is it in use?"
        exit 1
    fi
else
    echo "⚠️ $MOUNT_DESTINATION is not currently mounted."
    if [ -d "$MOUNT_DESTINATION" ]; then
        echo "ℹ️ The folder exists but does not have an active mount point."
    else
        echo "🚫 The folder $MOUNT_DESTINATION does not exist."
    fi
fi

echo -e "\n🏁 Operation completed."
echo
read -n1 -r -s -p "Press any key to finish..."
echo


« Última modificación: 8 Junio 2025, 15:59 pm por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines