Archivo por días: 28 septiembre, 2026

Cronopete, ahora más accesible y con soporte SSH

Hace unos días saqué una nueva versión de Cronopete con dos importantes cambios: para empezar, he mejorado la accesibilidad, de manera que las personas que necesiten utilizar un lector de pantalla puedan usar Cronopete para sus copias de seguridad; y la segunda es soporte para guardar las copias en un servidor SSH/SFTP remoto.

En el caso de la accesibilidad, tengo que decir que no es perfecta por culpa de que Cronopete aún utiliza Gtk3, y mientras no haya soporte de libappindicator en Gtk4 no puedo hacer el port. A pesar de todo, ahora por lo menos es utilizable (antes era imposible).

Respecto al soporte de SSH/SFTP, puede parecer que al utilizar RSync por debajo la implementación sería sencilla. Nada más lejos de la realidad.

Para empezar, está la cuestión de que RSync sólo se utiliza para la copia en sí, pero es mi propio código el que necesita una lista de las copias actuales para decidir contra cual se deben hacer los enlaces duros en la nueva copia, cuanto espacio libre hay en el servidor, y acceder a los contenidos para la interfaz de recuperación de ficheros. Todo ello requiere acceso por SFTP.

La primera solución (que, de hecho, llegué a implementar en origen) fue utilizar directamente GVFS para acceder al sistema de ficheros remoto donde se almacenaban las copias. Esto funcionaba realmente bien, pero tenía un problema que, en mi opinión, era muy serio: cualquier acceso obliga a permitir que GVFS monte en local el sistema de archivos remotos mediante FUSE. Esto es un riesgo porque eso significa que cualquier aplicación tendría acceso a las copias de seguridad, y además con permisos de lectura y de escritura, por lo que un accidente (o peor, un ransomware) podría hacer que perdiésemos nuestras copias de seguridad.

Ante esto decidí ir a la solución compleja pero más segura, que consistió en implementar una clase que implemente la interfaz GFile y, específicamente, las llamadas que necesito tener en Cronopete para acceder a un sistema SFTP remoto, usando por debajo libssh2. Esta biblioteca permite trabajar directamente contra un servidor SSH/SFTP sin necesidad de montarlo, lo que significa que las copias de seguridad pueden estar almacenadas en una partición diferente, y acceder a ellas mediante un usuario específico, de manera que aunque GIO/GVFS se vean comprometidos, nuestras copias de seguridad no lo estén.

Al usar la interfaz GFile, todo el código de Cronopete se conserva prácticamente inalterado, y sólo hace falta cambiar la inicialización del objeto concreto que se va a usar, de manera que apunte bien al disco duro USB, a una carpeta local, o al servidor SSH/SFTP.

¡¡Que lo disfrutéis!!