Skip to content

Instantly share code, notes, and snippets.

@Noisk8
Created February 10, 2025 21:41
Show Gist options
  • Save Noisk8/63eb23929697235de1152b066878787e to your computer and use it in GitHub Desktop.
Save Noisk8/63eb23929697235de1152b066878787e to your computer and use it in GitHub Desktop.
Back Up VPS
#!/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