Herramienta de backup seguro hacia servidores SSH/SFTP, ejecutable directamente desde un pendrive en Windows y Linux, sin instalación en el sistema host.
- ¿Qué es SafingData?
- Características
- Requisitos
- Instalación y configuración inicial
- Configurar tu servidor SSH
- Uso del programa
- Estructura del proyecto
- Configuración avanzada
- Solución de problemas
- Contribuir
- Licencia
SafingData es una aplicación de escritorio portable (basada en Python + Tkinter) que te permite hacer backups completos de archivos y carpetas hacia cualquier servidor SSH que tengas disponible. Está diseñada para ejecutarse directamente desde un pendrive, sin necesidad de instalar nada en la computadora donde se use.
- ✅ 100% portable — corre desde pendrive, sin instalación
- ✅ Multiplataforma — Windows y Linux (macOS con adaptaciones menores)
- ✅ Múltiples servidores SSH — asigna un nombre clave (alias) a cada máquina y cambia de servidor al instante
- ✅ Protección de privacidad — oculta por defecto el host y usuario en la interfaz (
••••••••••) con botón mostrar/ocultar - ✅ Puerto SSH opcional — déjalo en blanco y usará automáticamente el puerto estándar
22 - ✅ Prueba de conexión — verifica el acceso SSH directamente desde la ventana de configuración
- ✅ Backup completo via SSH/SFTP con
paramiko - ✅ Progreso en tiempo real con barra de avance y ETA
- ✅ Gestión de backups — listar, descargar y eliminar desde la interfaz
- ✅ Verificación de espacio — reserva automática para el sistema operativo del servidor
- ✅ Cancelación segura — limpia los archivos parciales en el servidor al cancelar
- ✅ Configuración persistente — guarda tus perfiles SSH en
data/config.json - ✅ Interfaz oscura — diseño táctico de alta legibilidad
| Sistema | Requisito mínimo |
|---|---|
| Windows | Python 3.8+ (descargar) o Python embebido en python-embed/ |
| Linux | Python 3.8+ (generalmente preinstalado) |
| Ambos | Tkinter (incluido con Python estándar en Windows) |
Linux — Instalar Tkinter si falta:
# Ubuntu/Debian sudo apt install python3-tk # Fedora sudo dnf install python3-tkinter # Arch Linux sudo pacman -S tk
| Requisito | Detalle |
|---|---|
| Sistema operativo | Cualquier Linux con servidor SSH activo |
| Acceso | Usuario con contraseña SSH |
| Espacio | El que quieras asignar a los backups |
| Software | Solo sshd estándar — no requiere nada adicional |
git clone https://github.com/TU_USUARIO/SafingData.gitO descarga el ZIP desde GitHub y extrae en tu pendrive.
Las dependencias se instalan localmente en la carpeta libs/ del proyecto, sin afectar el sistema.
Windows:
setup_libs.bat
Linux / macOS:
chmod +x setup_libs.sh run.sh
./setup_libs.shCualquier sistema (manual):
python setup_libs.pyℹ️ Esto descarga
paramikoy sus dependencias criptográficas enlibs/. Solo necesitas hacerlo una vez; después puedes usar el pendrive sin internet.
Antes de usar el programa, edita data/config.json (ver sección de configuración).
- Abre el programa (ver ejecutar)
- Haz clic en el botón ⚙ (engranaje) en la barra superior
- Selecciona una máquina existente o haz clic en + Nueva para crear un nuevo perfil con su NOMBRE CLAVE
- Rellena los campos: NOMBRE CLAVE, HOST / IP, PUERTO (opcional, por defecto 22), USUARIO SSH, DIR. REMOTO
- (Opcional) Haz clic en Probar conexión para validar el acceso sin guardar aún
- Haz clic en GUARDAR
Crea o edita el archivo data/config.json:
{
"machines": [
{
"name": "Servidor Principal",
"host": "192.168.1.100",
"port": 22,
"user": "mi_usuario",
"remote_base": "safingdata_backups"
},
{
"name": "VPS Trabajo",
"host": "vps.ejemplo.com",
"port": 22,
"user": "ubuntu",
"remote_base": "safingdata_backups"
}
],
"active_machine": "Servidor Principal",
"selected_paths": []
}| Campo | Descripción | Ejemplo |
|---|---|---|
name |
Nombre clave o alias descriptivo para la máquina | "Servidor Casa", "VPS Producción" |
host |
IP o dominio del servidor SSH | "192.168.1.100" o "backup.midominio.com" |
port |
Puerto SSH del servidor (opcional, por defecto 22) | 22 |
user |
Tu nombre de usuario en el servidor | "ubuntu", "pi", "root" |
remote_base |
Carpeta donde se guardan los backups (relativa al home del usuario) | "safingdata_backups" |
active_machine |
Nombre clave de la máquina actualmente activa | "Servidor Principal" |
ℹ️ Si abres el programa con un archivo
config.jsonen el formato antiguo (versión 1.0), este se migrará automáticamente al nuevo formato multi-máquina.
⚠️ El archivodata/config.jsonestá en.gitignorey nunca se sube a GitHub. Tus credenciales de servidor están seguras.
run.bat
O doble clic en run.bat desde el Explorador de archivos.
./run.sh- Haz clic en el botón CONECTAR (esquina superior derecha)
- Ingresa tu contraseña SSH en el diálogo que aparece
- El indicador de estado cambiará a verde: CONECTADO
💡 La contraseña nunca se guarda en disco. Debes ingresarla cada vez que conectes.
En el panel izquierdo:
- + Archivo — agrega uno o más archivos específicos
- + Carpeta — agrega una carpeta completa (se sube de forma recursiva)
- ✕ — elimina un ítem de la selección
El panel derecho muestra el tamaño total de lo seleccionado y el espacio disponible en el servidor.
- Haz clic en ▶ INICIAR BACKUP COMPLETO
- Asigna un nombre al backup (o usa el timestamp predeterminado)
- Confirma el diálogo de confirmación
- Observa el progreso en tiempo real con barra de avance y ETA
En el panel BACKUPS ACTIVOS (columna derecha):
| Botón | Acción |
|---|---|
| ⬇ Descargar | Descarga el backup seleccionado a una carpeta local |
| ✕ Eliminar | Elimina permanentemente el backup del servidor |
⚠️ La eliminación es permanente e irreversible. Siempre descarga primero si necesitas recuperar datos.
- Haz clic en ◼ CANCELAR durante un backup activo
- El programa cancelará la transferencia y limpiará automáticamente los archivos parciales en el servidor
SafingData/
├── run.bat ← Lanzador Windows
├── run.sh ← Lanzador Linux/macOS
├── setup_libs.bat ← Instalar dependencias (Windows)
├── setup_libs.sh ← Instalar dependencias (Linux/macOS)
├── setup_libs.py ← Script de instalación Python (cualquier OS)
│
├── app/
│ ├── __init__.py
│ ├── main.py ← Punto de entrada y verificación de dependencias
│ ├── backup.py ← Motor SSH/SFTP (paramiko): upload, download, delete
│ ├── storage.py ← Cálculo de tamaño local y verificación de cuota remota
│ ├── scheduler.py ← Registro local de sesiones de backup (session.json)
│ ├── config.py ← Carga/guarda configuración (config.json)
│ └── ui/
│ ├── __init__.py
│ ├── app_window.py ← Ventana principal y lógica de la UI
│ ├── file_selector.py ← Panel selector de archivos/carpetas
│ ├── progress_panel.py ← Barra de progreso y log de eventos
│ └── styles.py ← Paleta de colores, fuentes y estilos ttk
│
├── libs/ ← Dependencias instaladas (generado por setup_libs, en .gitignore)
│
└── data/ ← Datos locales persistentes (en .gitignore)
├── config.json ← Tu configuración de servidor SSH (NO se sube a GitHub)
└── session.json ← Registro de backups realizados (NO se sube a GitHub)
Por defecto, SafingData reserva 20 GB del espacio total del servidor para el sistema operativo del servidor y solo permite subir backups en el espacio restante. Esta reserva está definida en app/storage.py:
SYSTEM_RESERVE_GB = 20Modifica este valor según las necesidades de tu servidor.
El script setup_libs.py instala en libs/:
| Paquete | Versión mínima | Propósito |
|---|---|---|
paramiko |
3.4.0 | Protocolo SSH/SFTP |
bcrypt |
4.0.0 | Hashing de claves SSH |
cryptography |
41.0.0 | Operaciones criptográficas |
pynacl |
1.5.0 | Criptografía NaCl |
cffi |
1.16.0 | Interfaz C para cryptography |
En Windows puedes colocar un Python embebido en python-embed/ para que el programa funcione sin que el sistema tenga Python instalado. Descarga la versión embebida desde python.org (busca "Windows embeddable package").
- La contraseña SSH nunca se almacena en disco — se pide cada vez que conectas
- El archivo
data/config.json(con host/usuario) está en.gitignore— no se sube a GitHub - El archivo
data/session.json(registro de backups) también está en.gitignore - La carpeta
libs/(dependencias) también está en.gitignore - Las transferencias van cifradas por SSH/SFTP (no texto plano)
Las dependencias no están instaladas. Ejecuta:
./setup_libs.sh # Linux/macOS
setup_libs.bat # Windows- Verifica que el servidor SSH esté activo:
sudo systemctl status ssh - Confirma el puerto correcto (por defecto 22, puede ser diferente)
- Asegúrate de que el firewall permita el puerto SSH
- Verifica usuario y contraseña
- Asegúrate de que el usuario tiene acceso SSH al servidor
sudo apt install python3-tk # Ubuntu/Debian
sudo dnf install python3-tkinter # Fedora- Verifica tu conexión de red — la transferencia SSH se corta si hay pérdida de conexión
- Aumenta el timeout en
backup.pysi tu servidor responde lento (parámetrotimeout=30)
¡Las contribuciones son bienvenidas! Para contribuir:
- Haz un fork del repositorio
- Crea una rama con tu feature:
git checkout -b feature/nueva-funcionalidad - Haz tus cambios y commitea:
git commit -m 'feat: añadir nueva funcionalidad' - Push a tu fork:
git push origin feature/nueva-funcionalidad - Abre un Pull Request
- Autenticación por clave pública (
.pem/.ppk) - Backups incrementales (solo archivos modificados)
- Programación automática (backup diario/semanal)
- Cifrado local antes del upload
- Soporte para múltiples servidores
Este proyecto está bajo la licencia MIT. Ver el archivo LICENSE para más detalles.
SafingData v1.1.0 — Diseñado por GaboDev - CEO DE SPIDERWEB
Ver Registro de Cambios (CHANGELOG.md)