bglug.it/content/posts/2011-09-29-bilancio-online-con-gnucash-mysql-ssh.md
2024-04-09 23:12:57 +02:00

9.2 KiB
Raw Blame History

title author type date url wordbooker_options categories
Bilancio online con Gnucash + MySQL + SSH jimmi post 2011-09-29T16:06:02+00:00 /2011/09/29/bilancio-online-con-gnucash-mysql-ssh/
a:25:{s:18:"wordbook_noncename";s:10:"ac5318f105";s:23:"wordbook_default_author";s:1:"0";s:23:"wordbook_extract_length";s:3:"256";s:26:"wordbooker_publish_default";s:2:"on";s:27:"wordbooker_like_button_show";s:2:"on";s:25:"wordbooker_like_share_too";s:2:"on";s:27:"wordbooker_like_button_post";s:2:"on";s:27:"wordbooker_like_button_page";s:2:"on";s:25:"wordbook_fbshare_location";s:3:"top";s:24:"wordbook_fblike_location";s:3:"top";s:22:"wordbook_fblike_action";s:9:"recommend";s:27:"wordbook_fblike_colorscheme";s:4:"dark";s:20:"wordbook_fblike_font";s:5:"arial";s:22:"wordbook_fblike_button";s:12:"button_count";s:21:"wordbook_fblike_faces";s:5:"false";s:18:"wordbook_attribute";s:31:"Posted a new post on their blog";s:29:"wordbook_republish_time_frame";s:2:"10";s:24:"wordbooker_status_update";s:2:"on";s:29:"wordbooker_status_update_text";s:50:": Nuovo post sul blog bglug.it! - %title% - %link%";s:19:"wordbook_actionlink";s:3:"300";s:20:"wordbook_comment_get";s:2:"on";s:21:"wordbook_comment_push";s:2:"on";s:18:"wordbook_page_post";s:4:"-100";s:18:"wordbook_orandpage";s:1:"2";s:17:"wordbook_new_post";s:1:"1";}
a:25:{s:18:"wordbook_noncename";s:10:"ac5318f105";s:23:"wordbook_default_author";s:1:"0";s:23:"wordbook_extract_length";s:3:"256";s:26:"wordbooker_publish_default";s:2:"on";s:27:"wordbooker_like_button_show";s:2:"on";s:25:"wordbooker_like_share_too";s:2:"on";s:27:"wordbooker_like_button_post";s:2:"on";s:27:"wordbooker_like_button_page";s:2:"on";s:25:"wordbook_fbshare_location";s:3:"top";s:24:"wordbook_fblike_location";s:3:"top";s:22:"wordbook_fblike_action";s:9:"recommend";s:27:"wordbook_fblike_colorscheme";s:4:"dark";s:20:"wordbook_fblike_font";s:5:"arial";s:22:"wordbook_fblike_button";s:12:"button_count";s:21:"wordbook_fblike_faces";s:5:"false";s:18:"wordbook_attribute";s:31:"Posted a new post on their blog";s:29:"wordbook_republish_time_frame";s:2:"10";s:24:"wordbooker_status_update";s:2:"on";s:29:"wordbooker_status_update_text";s:50:": Nuovo post sul blog bglug.it! - %title% - %link%";s:19:"wordbook_actionlink";s:3:"300";s:20:"wordbook_comment_get";s:2:"on";s:21:"wordbook_comment_push";s:2:"on";s:18:"wordbook_page_post";s:4:"-100";s:18:"wordbook_orandpage";s:1:"2";s:17:"wordbook_new_post";s:1:"1";}
Software

Gnucash è unottimo strumento per tenere un bilancio familiare, e dalla versione 2.4.0 supporta il collegamento ad un database SQLite, MySQL o PostgreSQL per larchiviazione dei dati. Usando un database locale sono tuttavia legato ad un computer specifico per il suo utilizzo. Io voglio invece poter aprire una sessione di Gnucash da qualsiasi computer e collegarmi sempre ad ununica base dati remota.

Aprire il database alla rete è decisamente poco sicuro, ma un tunnel SSH mi offre una alternativa leggera e affidabile. Per implementare il tutto ho usato:

Lato server:

Lato client:

Tutti questi software girano indifferentemente su piattaforme  Linux, Windows e Mac, il che offre unampia flessibilità. Per me che ho a casa un server Linux collegato alla rete il tutto è stato molto semplice, ma non escludo che anche un hosting non troppo costoso offra un supporto sufficiente per implementare il tutto.

Server

La configurazione del server SSH non richiede niente di particolare, se non assicurarsi che il firewall sia correttamente configurato per permettere laccesso alla porta 22, o qualunque altra voi abbiate impostato. Se volete una sicurezza maggiore consiglio di usare unautenticazione tramite chiavi, come descritto qui.

Il prossimo passo è creare il database e lutente che dovrà utilizzarlo. Dato che creeremo un tunnel SSH è anche possibile usare phpMyAdmin da remoto come spiegato ad esempio qui, ma la procedura è così semplice che io decido di farlo da terminale. Dopo aver ottenuto laccesso al server la sequenza è la seguente:

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4012
Server version: 5.1.49-3 (Debian)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database gnucash;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on gnucash.* to gnucash@localhost identified by 'PASSWORD' with grant option;
Query OK, 0 rows affected (0.12 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.13 sec)

mysql> exit
Bye
#

Il che significa che, dopo aver ottenuto laccesso come utente root a mysql creo il database gnucash e con il comando GRANT creo direttamente lutente gnucash, gli assegno i permessi per luso del datatbase e imposto la PASSWORD di accesso. Nella documentazione di Gnucash non ho trovato nulla riguardo i permessi necessari allutente per lutilizzo del programma, quindi li assegno tutti, anche se probabilmente è possibile limitarli e migliorare la sicurezza dellaccesso.

Client

Prima di avviare Gnucash su un qualsiasi client è necessario creare il tunnel SSH, che si esegue abbastanza semplicemente su qualsiasi piattaforma.

OpenSSH Client (Linux e Mac)

Da un terminale si digita:

# ssh -L 3307:localhost:3306 -i /media/USB/private.key utente@miosito.com

lopzione -i specifica la posizione della chiave privata per lautenticazione, se necessaria, che io tengo nella chiavetta USB, mentre con lopzione -L creo il tunnel fino al mio server che si trova in miosito.com, specificando tre parametri:

3307 è la porta locale a cui mi dovrò collegare per entrare nel tunnel

localhost è lindirizzo dove è disponibile il server MySQL. Dato che il mio tunnel “esce” sulla stessa macchina lindirizzo è localhost.

3306 è la porta alla quale collegarmi per accedere al server MySQL

Putty (Windows)

Nella finestra di configurazione di Putty inserisco i seguenti dati:

Session: inserisco lhost name, miosito.com, e la porta del server SSH, 22 o altro.

Connection->Data:  in Login details posso inserire il nome utente per il collegamento SSH, per evitare che mi venga chiesto ogni volta.

Connection->SSH->Auth: specifico la posizione del file contenente la private key per lautenticazione, se necessaria.

Connection->SSH->Tunnels: in source port inserisco la porta locale di accesso, e in destination inserisco lindirizzo del server MySQL e la porta di destinazione con la sintassi localhost:3306

Prima di aprire la connessione ho la possibilità, ritornando alla finestra Session, di salvare i parametri della sessione per poterli richiamare senza reinserirli nuovamente. Clicco su Open e dopo aver inserito la password il prompt del terminale mi indicherà che il tunnel è attivo.

Gnucash

Ora posso lanciare Gnucash e aprire un nuovo file indicando come formato dei dati mysql, come host la macchina da cui abbiamo aperto il tunnel e la porta di accesso, nel nostro caso 127.0.0.1:3307, il nome del database, gnucash, il nome dellutente MySQL, gnucash, e la PASSWORD di accesso. Il programma crea in autmatico tutte le tabelle necessarie a seconda della struttura dei conti da noi indicata.

Come nome di host ho indicato lindirizzo IP perchè su macchine Linux, per motivi che ignoro, se indico localhost:3307 mi viene restituito un errore e il collegamento abortisce. Su macchine Windows funzionano entrambe le sintassi.

Sono pronto ora per inserire i dati. Ogni volta che vorrò modificarli da qualsiasi posto mi trovi sarà sufficiente aprire il tunnel e da Gnucash aprire il file esistente inserendo gli stessi parametri sopra indicati.

Se utilizzate una chiave privata è sconsigliabile sparpagliarla su tutte le macchine dove lavorate, mentre è pratico e abbastanza sicuro tenerla su una chiavetta USB dove può trovare posto anche Putty, che non necessita di installazione e occupa pochissimo spazio.

Auguro un buon pareggio di bilancio a tutti 🙂