{"id":3275,"date":"2026-09-28T22:08:30","date_gmt":"2026-09-28T22:08:30","guid":{"rendered":"https:\/\/blog.rastersoft.com\/?p=3275"},"modified":"2026-09-28T22:08:30","modified_gmt":"2026-09-28T22:08:30","slug":"cronopete-ahora-mas-accesible-y-con-soporte-ssh","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=3275","title":{"rendered":"Cronopete, ahora m\u00e1s accesible y con soporte SSH"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hace unos d\u00edas saqu\u00e9 una nueva versi\u00f3n de <a href=\"https:\/\/www.rastersoft.com\/programas\/cronopete.html\">Cronopete<\/a> 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 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Secure_Shell\">SSH<\/a>\/<a href=\"https:\/\/en.wikipedia.org\/wiki\/SSH_File_Transfer_Protocol\">SFTP<\/a> remoto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el caso de la accesibilidad, tengo que decir que no es perfecta por culpa de que Cronopete a\u00fan 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).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Respecto al soporte de SSH\/SFTP, puede parecer que al utilizar <a href=\"https:\/\/en.wikipedia.org\/wiki\/Rsync\">RSync<\/a> por debajo la implementaci\u00f3n ser\u00eda sencilla. Nada m\u00e1s lejos de la realidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para empezar, est\u00e1 la cuesti\u00f3n de que RSync s\u00f3lo se utiliza para la copia en s\u00ed, pero es mi propio c\u00f3digo 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\u00f3n de ficheros. Todo ello requiere acceso por SFTP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La primera soluci\u00f3n (que, de hecho, llegu\u00e9 a implementar en origen) fue utilizar directamente <a href=\"https:\/\/en.wikipedia.org\/wiki\/GVfs\">GVFS<\/a> para acceder al sistema de ficheros remoto donde se almacenaban las copias. Esto funcionaba realmente bien, pero ten\u00eda un problema que, en mi opini\u00f3n, era muy serio: cualquier acceso obliga a permitir que GVFS monte en local el sistema de archivos remotos mediante <a href=\"https:\/\/en.wikipedia.org\/wiki\/Filesystem_in_Userspace\">FUSE<\/a>. Esto es un riesgo porque eso significa que cualquier aplicaci\u00f3n tendr\u00eda acceso a las copias de seguridad, y adem\u00e1s con permisos de lectura y de escritura, por lo que un accidente (o peor, un <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ransomware\">ransomware<\/a>) podr\u00eda hacer que perdi\u00e9semos nuestras copias de seguridad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ante esto decid\u00ed ir a la soluci\u00f3n compleja pero m\u00e1s segura, que consisti\u00f3 en implementar una clase que implemente la interfaz <a href=\"https:\/\/docs.gtk.org\/gio\/iface.File.html\">GFile<\/a> y, espec\u00edficamente, 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\u00f3n diferente, y acceder a ellas mediante un usuario espec\u00edfico, de manera que aunque GIO\/GVFS se vean comprometidos, nuestras copias de seguridad no lo est\u00e9n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al usar la interfaz GFile, todo el c\u00f3digo de Cronopete se conserva pr\u00e1cticamente inalterado, y s\u00f3lo hace falta cambiar la inicializaci\u00f3n 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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1\u00a1Que lo disfrut\u00e9is!!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hace unos d\u00edas saqu\u00e9 una nueva versi\u00f3n 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 &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=3275\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Cronopete, ahora m\u00e1s accesible y con soporte SSH<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-3275","post","type-post","status-publish","format-standard","hentry","category-nueva-version"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/3275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3275"}],"version-history":[{"count":1,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/3275\/revisions"}],"predecessor-version":[{"id":3276,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/3275\/revisions\/3276"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}