script auto connect multi ssh-server konsole

#!/bin/bash


## 
## arr dei server  formato '[email protected] |nome_simbolico'  
##
SERVER=('[email protected] |SERVERA' '[email protected] | SERVERB' '[email protected] -p4390 |SERVERC' '[email protected] -p2100 |
SERVERD')



# start a new konsole window and save the handle in $konsole
konsole=$(dcopstart konsole-script)

# maximize the new window
dcop $konsole konsole-mainwindow#1 maximize

# get current session for the first (just created) window
thissession=$(dcop $konsole konsole currentSession)

# rename this window/session
dcop $konsole $thissession renameSession "Scuolazoo  init"


# start a new session tab for each server
for s in "${SERVER[@]}" ; do
srv=`echo $s|awk -F\| '{print $1}'`
name=`echo $s|awk -F\| '{print $2}'`

# this output is displayed on the terminal which is running your script
echo "connect to server: $name"

# create another konsole tab and save handle in $newsession
newsession=`dcop $konsole konsole newSession "ssh $srv"`

# wait for shell startup 
while [ `dcop $konsole $newsession sessionPID` -eq 0 ]; 
do sleep 0.1 
done

# rename the new session
dcop $konsole $newsession renameSession $name

# and start the ssh session
dcop $konsole $newsession sendSession "exec ssh $srv  \"$param\""

done

# close the first session window
dcop $konsole $thissession closeSession > /dev/null
Posted in Bash at February 9th, 2010. No Comments.

bash find email year based

for i in `find . -type f -iname ‘*[0-9]*’` ; do  head -n $(grep -m1 -n ^$ $i | awk -F : ‘{print $1}’) $i | grep “^Date.*\ 2005\ ” -q  ; if [ $? != 1 ]; then echo $PWD $i; fi ; done

Posted in Bash at February 9th, 2010. No Comments.

bash countdown refresh screen terminal counter

[email protected]:~$ clear && for i in `seq -10 0`; do tput cup 1 0 && printf ” $i ” ; sleep 1; done

Posted in Bash at November 26th, 2008. No Comments.

script backup server ftp curl

Di seguito un semplicissimo script bash per effettuare il backup di una direcotry compressa su un server ftp

#!/bin/sh
date
echo “Inizio procedura backup XXXXXXXXX su FTP @XXX.XXX.XXX.XXX”

echo “cancellazione vecchio backup”
rm -rf /var/backups/texilee.it

echo “rm -rf /var/backups/texilee.it” $?

echo; echo “creazione nuova directory”
mkdir /var/backups/texilee.it

echo “mkdir /var/backups/texilee.it” $?
echo;

echo “Creazione tgz….”

cd /var/backups/texilee.it/

tar zcf sito.tgz /var/www/ || exit “Errore crezione tgz.”

ls -la /var/backups/texilee.it/

/usr/bin/curl -T /var/backups/texilee.it/sito.tgz ftp://usertexilee:[email protected]/texilewww.tgz

if [ $? -eq 0 ]
then

echo “backup in corso…”
else

exit $?

fi

echo “procedura completata correttamente”
date
mail -s “Automatic Backup FTP System NOTIFICATION” [email protected] << MAILBODY;

Copia di backup www.texilee.it eseguita correttamente su ftp.

MAILBODY

exit 0

Posted in Bash at March 5th, 2008. No Comments.

apc smart ups script snmp bash

APC azienda leader nella fabbricazione di gruppo di continuità permette
via snmp il monitoraggio del device.
Alcune delle informazioni più importanti che si possono ottenere sono:

– lo stato delle batterie [Normal|Low]
– il tempo trascorso in modalità batteria
– il tempo massimo in modalità batteria
– la capacità in % delle batterie
– il rilevamento delle batterie da sostituire
– la temperatura delle batterie
– la temperature ambientale

Utilizzando delle semplici istruzioni snmp, due righe di bash e un canale (un demone…)
per interfacciarsi ad un gateway sms possiamo farci inviare dei messaggi sms in caso di problemi, oppure semplicemente ricevere ad intervalli regolari una mail informativa sullo stato.

Avendo ad esempio un condizionatore “casalingo” il gruppo di continuità può venirci incontro
offrendoci la possibilità materiale di ottenere la temperatura della nostra server farm.

NB: sono in commercio sensori per il rilevamento di umidità.

Installato snmp e scaricato il file MIB (Management Information Base) sotto /usr/share/snmp/mibs/powernetX.X.X.mib bisogna configurare il demone sul dispositivo ups.
Per farlo consultate il manuale del produttore.

Nell’esempio il dispositivo avrà indirizzo IP 192.168.30.11 e la community read “public”

Possiamo iniziare il polling dello stato con uno script


#!/bin/sh
echo "---------------------------------";
snmpget -OsQ -m "/usr/share/snmp/mibs/powernetX.X.X.mib" \
-v1 -c public 192.168.30.11 \
upsBasicBatteryStatus.0 \
upsBasicBatteryTimeOnBattery.0 \
upsAdvBatteryCapacity.0 \
upsAdvBatteryTemperature.0 \
upsAdvBatteryRunTimeRemaining.0 \
upsAdvBatteryReplaceIndicator.0 \
iemStatusProbeCurrentTemp.1
echo "---------------------------------";
echo;
exit 0

che produrrà un output molto chiaro

tex:~$ /usr/local/bin/upsinfo
---------------------------------
upsBasicBatteryStatus.0 = batteryNormal
upsBasicBatteryTimeOnBattery.0 = 0:0:00:00.00
upsAdvBatteryCapacity.0 = 100
upsAdvBatteryTemperature.0 = 29
upsAdvBatteryRunTimeRemaining.0 = 0:3:58:00.00
upsAdvBatteryReplaceIndicator.0 = noBatteryNeedsReplacing
iemStatusProbeCurrentTemp.1 = 24
---------------------------------

Per controllare lo stato della temperatura esterna (per creare grafici con mrtg, farsi inviare sms di allarme, ecc…) basterà inserire nello script:


CURTEM=`snmpget -Oqv -m "/usr/share/snmp/mibs/powernetX.X.X.mib" -v1 -c public 192.168.30.11 iemStatusProbeCurrentTemp.1`

e confrontare/salvare il valore di CURTEM.

Posted in Bash at September 24th, 2007. No Comments.

vpopmail clean old maildir last authentication

Solitamente i clienti pressano per l’attivazione di una casella email, ma non si preoccupano minimamente di segnalare al gestore la disattivazione.

I metodi per recuperare la lista delle caselle in disuso sono molteplici (vpopmail permette anche la disattivazione automatica dopo un tot di tempo), io preferisco estrapolare la data dell’ultimo accesso e parsarsi un comodo fie formattato.

Il comando che genera il file


for i in `vpopbull -nV`;do echo -n "$i " ; vuserinfo $i |grep "last auth:" ; done

l’output è il seguente

[email protected] last auth: Never logged in
[email protected] last auth: Wed Sep 19 11:20:32 2007
[email protected] last auth: Never logged in
[email protected] last auth: Wed Sep 19 10:49:43 2007
[email protected] last auth: Never logged in
[email protected] last auth: Tue Jun 6 16:52:25 2006

e con poche combinazioni di bash si riesce ad esempio a risalire agli utenti “mai loggati” o a quelli “loggati l’anno scorso”.

Posted in Bash at September 19th, 2007. 2 Comments.

clamav-daemon check script

Negli ultimi tempi su una macchina molto stressata ho disabilitato l’opzione di freshclam che imponeva il reload delle signature a clamd, commentandola

#NotifyClamd /etc/clamav/clamd.conf

Ho inoltre abbassato il tempo dell’opzione SelfCheck di clamd a 1800.

Il problema era molto grave perchè i processi clamd sparivano senza lasciare traccia (solo il logging di grsec mi segnalava il segmentation fault) mentre il socket rimaneva aperto, facendo andare in “palla” pure simscan.

Non sono riuscito a risolvere in maniera pulitissima e prima di cantare vittoria ho preparato uno script che controlla esistenza di pid, processi, socket e nel peggiore dei casi si occupa di fare un restart di clamd

Il codice per contare il numero dei processi (anche spamassassin gira sotto clamav)

ssh texilee.it ps --User=clamav u| grep /usr/sbin/clamd |wc -l

Dopodichè se tutti i test di “vita” falliscono forzo il restart del demone.

Se qualcuno ha lo stesso problema (magari..) o vuole cimentarsi nel debugging mi può rispondere sul blog o via mail o qui

Posted in Bash, Linux at September 18th, 2007. No Comments.

grep awk strip empty commented lines

Strip out empty or commented code.

grep -e "^[^#]" /etc/file.conf

awk '{ if ($0 !~ /^[#]|^$/) print $0 ;}' /etc/file.conf

Posted in Bash at July 9th, 2007. No Comments.

Realtime block list stats for qmail

Per ottenere qualche statistica sull’efficenza della varie rbl sul sistema di posta ecco un semplice file di cron
Ogni giorno alle 7:23 root esegue

23 7 * * * root

Info sulla macchina

echo "RBL REPORT NS1" &&

E il ciclo che genera le stats

for i in zen.spamhaus.org dul.dnsbl.sorbs.net; \\\

do echo $i &&  grep "$i" /var/log/mail.log.0 | \\\

awk '{print $8}'|sort|uniq|sort|wc -l; \\\

done

Come esempio ho usato zen.spamhaus.org dul.dnsbl.sorbs.net metteteci quelle cheusate voi separate da spazi.

Posted in Bash at May 4th, 2007. No Comments.

BASH Squid linea di comando awk

Squid è un ottimo proxy server, per conoscere quali sono i domini più cliccati dai nostri utenti possiamo usare una linea di script bash. Ipotizziamo un formato di log del genere

1169028202.491 2456 192.168.1.1 TCP_MISS/200 9013 POST http://www.5t.torino.it/5t/it/percorsi – DIRECT/213.215.218.134 text/html

Contiamo (a occhio va bene) in che posizione si trova la entry relativa alla url richiesta. Il separatore che uso è lo spazio.

1) 1169028202.491
2) 2456
3) 192.168.1.1
4) TCP_MISS/200
5) 9013
6) POST
7) http://www.5t.torino.it/5t/it/percorsi
8) –
9) DIRECT/213.215.218.134
10) text/html

Con awk e la funzione split delimito solo il dominio, dopodichè uso il solito procedimento di ordinamento (sort) e conteggio numerico (uniq -c)

cat  /var/log/squid/access.log | \\

awk '{ split($7,url,/\\//); print url[3]  }' |  \\

sort | uniq -c | sort -nr | less

Si ottiene la “classifica” domini per hits

Posted in Bash at January 18th, 2007. No Comments.