mercoledì 17 marzo 2010

tcpcs, alcune info del PC via telnet

In questi ultimi periodi ho sottoposto il mio PC a lavori "pesanti" che alzavano molto il load average e la temperatura che si avvicinava a livelli vertiginosi.
Solitamente i lavori eseguiti dal PC erano anche lunghi il che non mi permetteva di stare davanti ad esso per tutto il tempo dell'esecuzione per monitorare come il PC rispondesse a questo carico di lavoro e quindi, spesso, finivo per fare altro mentre il mio caro amato computer terminava i suoi incarichi. Il problema che mi sorgeva era però di monitorare quei parametri essenziali anche a distanza del PC. Avevo a disposizione il mio cellulare come unico collegamento tra me e il computer.

Ho subito pensato ad ssh e fu così che lo installai, aprii la mia porta 22 grazie al comodo router e sul mio cellulare (un banalissimo Motorola SLVR L7 con Java disponibile) installai MidpSSH, una comoda app. per gestire SSH/Telnet dal proprio cellulare J2ME.

Una volta completato il giro di installazioni faccio una prima prova e subito sono a confronto con la realtà: la connessione SSH funziona ma poi non ho nessun dialogo tra PC e cellulare; c'è qualcosa che non va!
Penso subito a un problema di SSH e di porte ma smentisco poco dopo questa ipotesi: provando a connettermi tramite SSH da un altro PC funziona tutto alla perfezione. Il mio PC risponde pronto.
A questo punto penso a un problema di MidpSSH e partono le ricerche e le prove (e intanto i centesimi scendono dal mio conto Vodafone).
Mentre, per l'ennesima volta, giro nelle impostazioni di MidpSSH mi cade l'occhio sulla possibilità di connettersi, oltre a SSH, a un server telnet normale. Ed è così che ho deciso di scrivere un piccolo server in python per ottenere ciò che voglio come lo voglio. E così nacque tcpcs.

Cos'è tcpcs?
Come spiegato nel piccolo racconto qui sopra è un semplice TCP server che, grazie a dei comandi, restituisce alcuni valori utili per analizzare lo stato del PC/server.

Quali sono i comandi disponibili?
Ho strutturato tcpcs con alcuni comandi, come avviene ad esempio per FTP (provate una sessione telnet ad un server FTP).
Li elenco con i vari parametri:
  • LOGIN username password Tenta il login con i dati "username" e "password". Restituisce "+OK" se i dati sono corretti oppure "-ERR" in caso di dati sbagliati.
  • TEMP Restituisce la temperatura della CPU (è necessario avere installato il pacchetto lm-sensors richiamabile con il comando "sensors") [necessario il login]
  • LOADAVG Restituisce il load average del PC (visualizzabile normalmente con il comando "uptime") [necessario il login]
  • UPTIME Restituisce l'uptime del PC (visualizzabile con il comando "uptime" da console) [necessario il login]
  • ISLOG Restituisce "+OK" se si è loggati oppure "-ERR" se non c'è aperta nessuna sessione di login. [necessario il login]
  • WHOAMI Restituisce il nick con cui si è loggati oppure un semplice "-ERR" in caso non è avvenuto il login. [necessario il login]
  • LOGOUT Chiude la sessione di login e quindi le richieste per i vari comandi dove è necessario essere loggati. [necessario il login]
  • TIME Restituisce l'ora del PC/server su cui tcpcs gira.
  • QUIT Termina la sessione telnet con il server
  • SHUTDOWN password Nel file di configurazione è possibile specificare una password speciale (diversa da quella con cui ci si logga). Conoscendo tale password è possibile terminare il processo del server. Diversamente bisogna killare il processo. Se nessuna password è specificata il comando viene considerato "non implementato" e quindi non funzionerà. [necessario il login]
Quali sono i files di configurazione?
I file di configurazione sono due:
  • /etc/tcpcs/opzioni.conf : contiene le opzioni generali usate dal server
  • /etc/tcpcs/users.conf : contiene la lista degli utenti e delle password con cui è possibile connettersi al server (per ora le password sono in chiaro per comodità e in quanto i dati trasmessi non sono dati molto sensibili e privati.)
Una volta installato il pacchetto di default la porta di ascolto sarà la 1110 TCP e l'account sarà admin sia come username che come password.
Semplicemente modificando tale file (da root) è possibile modificare le opzioni e gli utenti.

Quali sono i parametri del file /etc/tcpcs/opzioni.conf?
I parametri sono pochi e semplici:
  • tcpport (default = 1110) : la porta su cui il server si mette in ascolto
  • usersfile (default = users.conf) : il file da cui il server legge nick e password per l'autenticazione
  • shutpwd (default = disabilitata) : la password utilizzata con il comando SHUTDOWN per terminare il processo del server

E una volta installato?
Appena installato basta lanciare il processo (tcpcs) tramite shell oppure facendo ALT+F2 e digitare il comando.
Una volta avviato il server aprire una shell e digitare
telnet localhost 1110

Il server risponderà (se tutto è andato a buon fine) correttamente e sarà possibile loggarsi tramite il comando

LOGIN admin admin

Il resto dei comandi sono esposti sopra!
Per modificare l'account "admin:admin" basta modificare il file /etc/tcpcs/users.conf come utente root.

Se avete un IP fisso o utilizzate un servizio di DNS dinamico (io uso no-ip.com) il vostro PC/server sarà facilmente raggiungibile anche dall'esterno (a patto di aprire la porta 1110 o quella che voi specificate nel file di configurazione).

Voglio provarlo! Come si fa?
E' possibile scaricare il pacchetto .deb dal seguente link.
Il sorgente non c'è ancora (in formato .ZIP/.TAR etc. etc.) ma basta aprire il file .deb con un normale gestore di pacchetti (ad esempio file-roller) per estrapolare velocemente i sorgenti. Essendo scritto in python il codice non è compilato e quindi visualizzabile!
Le dipendenze sono semplicemente due: python (solitamente installato di default) e l'utility lm-sensors (necessaria per ottenere la temperatura della CPU).

L'ho provato e ho critiche/consigli/malfunzionamenti/complimenti/etc.
Postate pure nei commenti o mandate un e-mail tramite il mio nick di blogger!

Ringrazio tutti quelli che anche solo proveranno lo script!
Non ho la presunzione di fare script/software utilizzati a larga scala ma voglio condividere i miei piccoli "lavori" che potrebbero tornare utili ad altri nelle mie stesse condizioni. In fondo non è anche questo l'opensource (almeno a livello di filosofia)?