Created
February 10, 2025 21:41
-
-
Save Noisk8/63eb23929697235de1152b066878787e to your computer and use it in GitHub Desktop.
Back Up VPS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Primero accedemos al VPS y hacemos un Backup | |
# tar czf - .nym/* > BACKUPNYM.tar.gz | |
# Hacemos elñ respaldo al ordenador local | |
# scp -P 22 root@ip-del-vps:/root/archivo.zip /home/igor/ | |
# Definición de colores ANSI para mejorar la visualización en terminal | |
# Estos códigos de escape permiten colorear el texto de la salida | |
RED='\033[0;31m' # Color rojo para errores | |
GREEN='\033[0;32m' # Color verde para éxitos | |
BLUE='\033[0;34m' # Color azul para mensajes informativos | |
YELLOW='\033[1;33m' # Color amarillo para advertencias | |
NC='\033[0m' # Resetea el color al predeterminado | |
# Funciones auxiliares para imprimir mensajes con formato | |
# Estas funciones hacen el código más limpio y mantienen consistencia en los mensajes | |
print_message() { | |
echo -e "${BLUE}$1${NC}" # Mensajes informativos en azul | |
} | |
print_success() { | |
echo -e "${GREEN}✅ $1${NC}" # Mensajes de éxito en verde con un checkmark | |
} | |
print_error() { | |
echo -e "${RED}❌ $1${NC}" # Mensajes de error en rojo con una X | |
} | |
# Muestra el título del programa | |
echo -e "\n${BLUE}🔄 Asistente de Backup NYM VPS${NC}\n" | |
# Solicitud interactiva de datos necesarios para la conexión y el backup | |
# Se piden todos los parámetros necesarios con valores por defecto cuando es apropiado | |
# Solicita la IP del VPS (obligatoria) | |
read -p "📍 Ingrese la IP del VPS: " VPS_IP | |
if [ -z "$VPS_IP" ]; then | |
print_error "La IP es requerida" | |
exit 1 | |
fi | |
# Solicita el puerto SSH (por defecto 22) | |
read -p "🔌 Puerto SSH [22]: " SSH_PORT | |
SSH_PORT=${SSH_PORT:-22} # Si no se proporciona valor, usa 22 | |
# Solicita el usuario SSH (por defecto root) | |
read -p "👤 Usuario SSH [root]: " SSH_USER | |
SSH_USER=${SSH_USER:-root} # Si no se proporciona valor, usa root | |
# Solicita el nombre del archivo de backup (por defecto incluye la fecha actual) | |
read -p "📦 Nombre para el archivo de backup [nym-backup-$(date +%Y-%m-%d).tar.gz]: " BACKUP_NAME | |
BACKUP_NAME=${BACKUP_NAME:-"nym-backup-$(date +%Y-%m-%d).tar.gz"} | |
# Solicita la ruta local donde se guardará el backup (por defecto $HOME) | |
read -p "💾 Ruta local donde guardar el backup [$HOME]: " LOCAL_PATH | |
LOCAL_PATH=${LOCAL_PATH:-$HOME} | |
# Inicio del proceso de backup | |
print_message "\n🚀 Iniciando proceso de backup...\n" | |
# Verifica que la conexión SSH funcione antes de continuar | |
# Intenta una conexión simple que solo ejecuta 'exit' | |
if ! ssh -p $SSH_PORT $SSH_USER@$VPS_IP "exit" 2>/dev/null; then | |
print_error "No se pudo establecer conexión SSH. Verifique sus credenciales y conexión." | |
exit 1 | |
fi | |
print_success "Conexión SSH establecida" | |
# Crea el archivo de backup en el servidor remoto | |
# Se conecta via SSH y ejecuta el comando tar para comprimir la carpeta .nym | |
print_message "Creando backup..." | |
if ssh -p $SSH_PORT $SSH_USER@$VPS_IP "cd /root && tar czf $BACKUP_NAME .nym/*"; then | |
print_success "Backup creado exitosamente" | |
else | |
print_error "Error al crear el backup" | |
exit 1 | |
fi | |
# Descarga el archivo de backup desde el servidor remoto | |
# Utiliza scp para copiar el archivo de forma segura | |
print_message "\n📥 Descargando backup..." | |
if scp -P $SSH_PORT $SSH_USER@$VPS_IP:/root/$BACKUP_NAME "$LOCAL_PATH/"; then | |
print_success "Backup descargado exitosamente a: $LOCAL_PATH/$BACKUP_NAME" | |
else | |
print_error "Error al descargar el backup" | |
# Si falla la descarga, limpia el archivo temporal del servidor | |
ssh -p $SSH_PORT $SSH_USER@$VPS_IP "rm /root/$BACKUP_NAME" | |
exit 1 | |
fi | |
# Limpieza: elimina el archivo temporal del servidor remoto | |
# Es importante no dejar archivos innecesarios en el servidor | |
ssh -p $SSH_PORT $SSH_USER@$VPS_IP "rm /root/$BACKUP_NAME" | |
# Mensaje final de éxito | |
print_success "\n✨ ¡Proceso de backup completado!\n" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment