Expect pour les rebonds ssh

Aprés un sudo apt-get install expect, voici le contenu du fichier ssh-bound :

#!/usr/bin/expect -f
# des que la chaine de caractère attendu en retour est matché,
# on attend 1 seconde et on envoit notre chaine
set timeout 1
# la 1ere commande qui est executée sur notre machine
# c'est le 1er saut
spawn ssh user@host1
# on "attend" du shell qu'il nous renvoit la chaine "assword"
expect "*?assword :"
# on envoit notre pw, \r pour retour chariot
send -- "MON_SUPER_PASS_EN_CLAIR\r"
# le prompt
expect "*05b\$ "
# 2eme saut
send -- "ssh user@host2\r"
expect "*?assword :"
send -- "MON_SUPER_PASS_EN_CLAIR\r"
expect "*05b\$ "
# 3eme saut#!/usr/bin/expect -f
# des que la chaine de caractère attendu en retour est matché,
# on attend 1 seconde et on envoit notre chaine
set timeout 1
# la 1ere commande qui est executée sur notre machine
# c'est le 1er saut
spawn ssh user@host1
# on "attend" du shell qu'il nous renvoit la chaine "assword"
expect "*?assword :"
# on envoit notre pw, \r pour retour chariot
send -- "MON_SUPER_PASS_EN_CLAIR\r"
# le prompt
expect "*05b\$ "
# 2eme saut
send -- "ssh user@host2\r"
expect "*?assword :"
send -- "MON_SUPER_PASS_EN_CLAIR\r"
expect "*05b\$ "
# 3eme saut
send -- "ssh user@host3\r"
expect "*?assword :"
send -- "MON_SUPER_PASS_EN_CLAIR\r"
expect "*05b\$ "
# expect nous rend la main
interact
send -- "ssh user@host3\r"
expect "*?assword :"
send -- "MON_SUPER_PASS_EN_CLAIR\r"
expect "*05b\$ "
# expect nous rend la main
interact

Source

Perl – timestamp <-> date

  • TimeStamp vers Date

$ perl -e "print scalar(localtime(1173279767))"

  • Date vers TimeStamp

$ perl -MPOSIX -e "print (mktime(10,45,11,31,4,107));"

Avec :
# mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
#
# The month (mon), weekday (wday), and yearday (yday) begin at zero.
# The year (year) is given in years since 1900.
# Sunday is 0, not 1;
# January 1st is 0, not 1.
#
# I.e. January is 0, not 1;
# I.e. The year 1995 is 95; the year 2001 is 101.
# I.e. Calendar time for December 12, 1995, at 10:30 am : mktime( 0, 30, 10, 12, 11, 95 );
#
# Greenwich Mean Time (GMT)
# Daylight saving Time (DST)
# Coordinated Universal Time (CUT)
##################################

Source

Exim – Supprimer un mail en attente

1. Statut de la file :
>mailq
7m 369 1KMyus-0004dc-Of
user@domain.fr
2. Suppression
>exim -Mrm 1KMyus-0004dc-Of
Message 1KMyus-0004dc-Of has been removed

Mesurer la température avec Linux

Suivant l’article http://rosset.org/linux/temperature/howto.html, et après avoir commandé reçu les 2 échantillons DS18S20 gratuits (www.maxim-ic.com), me voici parti dans la construction d’une sonde de température sous Linux.

1. Hardware :

Composant: Type: Valeur utilisée: Equivalence:
D1 et D3 Diode Schottky BAT43 1N5818
D2 Zener 6V2 BZX85-C6V2 1N5234
D4 Zener 3V9 1N4730A 1N5228
R1 Résistance 1K5 1/4W 1K5 1/4W
Composants soudés entre eux

Composants soudés entre eux

Composants soudés entre eux

Composants soudés sur broche RS232 femelle

2eme sonde soudée en bout de fil

2eme sonde soudée en bout de fil

Les 2 sondes assemblées

Les 2 sondes assemblées

2. Software

digitemp (1.7)
RRDTool
Script BB Hobbit

3. Résultat (aprés un digitemp -s/dev/ttyS0 -i)

Jul 26 22:39:21 Sensor 0 C: 30.12 F: 86.22
Jul 26 22:39:23 Sensor 1 C: 25.44 F: 77.79

Un peu de domotique

Après avoir acheté pour une trentaine d’euros un ensemble carte 8 relais + controleur USB (cf.photo), me voici parti dans la prog. du port série.

1. Module pour faire de l’USB un port série :|

usbserial + ftdi_sio (/dev/ttyUSB0)

2. Le Perl script :

#!/usr/bin/perl -w

use Device::SerialPort;
use strict ;

my $str = «  » ;
my @cmd = () ;

# Set up the serial port
# 9600, 81N on the USB ftdi driver
my $port = Device::SerialPort->new(« /dev/ttyUSB0″);
$port->databits(8);
$port->baudrate(9600);
$port->parity(« none »);
$port->stopbits(1);
$port->handshake(« none »);

$port->write_settings || die(« Could not set up port »);

# 8 relays test
foreach my $nb_relay (1 .. 8 ) {
push (@cmd, [ 'on', 255, ${nb_relay}, 1 ,
'off', 255, ${nb_relay}, 0 ] ) ;
}

# Test
foreach my $c (@cmd) {
# Turn relay on
$str = join(  », map {pack(‘C’,$_)} (@{$c}[1..3]) ) ;
print « Relay $c->[2] => $c->[0]\n »;
$port->write( $str. »\r\n » );
$port->write_done();
sleep(1);
# Turn relay off
$str = join(  », map {pack(‘C’,$_)} (@{$c}[5..7]) ) ;
print « Relay $c->[2] => $c->[4]\n »;
$port->write( $str. »\r\n » );
$port->write_done();
sleep(1);
}
$port->close();

3. Photo

4. Video

Supervision – Mon Hobbit

De plus en plus convaincu, voici l’outil de supervision ultime (à mon avis) :

MySQL – Outil de modélisation

DBDesigner

Pour une archi AMD 64bits sous Debian :
dbdesigner-fork, tar -zxfv du *.bin-i386-linux.tar.gz,
puis cd bin && ./startdbd_usingAMD64

App

CVS – Rollback de version d’un fichier dans CVS

Suite à une nouvelle version, il est malheureusement possible de voir apparaître des regressions sur votre application favorite.

Nous allons voir ici comment faire un rollback de version sur un fichier géré par CVS.

1. D’abord, update de la dernière révision dans votre « working copy ».
$ cvs update test.pl
P test.pl

2. A la recherche de la dernière version stable .
$ cvs log test.pl
RCS file: /cvsroot/perl/test.pl,v
revision 1.45
date: 2008/04/06 15:14:32; author: cjovet; state: Exp; lines: +10
revision 1.44
date: 2008/04/04 18:21:53; author: cjovet; state: Exp; lines: +37
-20

3. Merge des changement entre les versions 1.45 et 1.44 (i.e. backwards),
dans notre répertoire de travail …
$ cvs update -j1.45 -j1.44 test.pl
retrieving revision 1.45
retrieving revision 1.44
Merging differences between 1.45 and 1.44 into test.pl

4. Vérification du numéro de la version courante (1.44)
$ cvs diff -r1.44 test.pl
Pas de sortie = pas de difference

5. Pour avoir la différence avec la HEAD :
$ cvs diff -rHEAD test.pl

6. Enfin, commit du « working copy » courant qui rend effectif le rollback.
$ cvs commit -m \"reverting back to state in revision 1.44 to undo some bugs\" test.pl
Checking in test.pl;
/cvsroot/perl/test.pl,v test.pl
new revision: 1.46; previous revision: 1.45
done.

App

Définition du hostname

* Test :

uname -n
hostname -a
hostname -s
hostname -d
hostname -f
hostname

* Configuration :

/etc/hosts
 DHCP
  127.0.0.1	mybox.mydomain.com	localhost.localdomain localhost mybox
 STATIC IP
  127.0.0.1	localhost.localdomain localhost
  192.168.0.1	mybox.mydomain.com	mybox hostname mybox.mydomain.com

cat /etc/HOSTNAME
 mybox.mydomain.com

DYN. DEBIAN :  /etc/network/interfaces
 iface ethX inet dhcp
  hostname mybox.mydomain.com

cat /proc/sys/kernel/hostname
 echo mybox.mydomain.com > /proc/sys/kernel/hostname

MySQL – Créer un utilisateur

A l’aide du client mysql :

  • Création d’un nouvelle base ainsi qu’un nouvel utilisateur ayant les pleins droits sur celle-ci :
    mysql -uroot -p
    <enter_mysql_root_pass>
    CREATE DATABASE <DB_NAME>;
    GRANT ALL PRIVILEGES ON <DB_NAME>.* TO 'my_user'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;
  • Élargir les droits utilisateur aux autres bases :
    GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;
  • Élargir les droits utilisateur pour un accès distant (autre que localhost)
    GRANT ALL PRIVILEGES ON <DB_NAME>.* TO 'my_user'@'%' IDENTIFIED BY 'my_password' WITH GRANT OPTION;

Source

App

MySQL – Modifier le mot de passe root

Etant vide par défaut (snif), voici 2 façons pour modifier le mot de passe root de mysql :

  • SET PASSWORD FOR

mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

  • mysqladmin

mysqladmin -u root password "newpass"

App

Les signaux Unix/Linux

Un signal système est un signal envoyé à un processus.

Sous Unix/Linux (non-exhaustif) :

NOM NUM Signification
SIGHUP 1 interruption de l’entrée
SIGINT 2 interruption clavier forte (Ctrl-C)
SIGQUIT 3 interruption clavier faible (Ctrl-\)
SIGILL 4 instruction illégale
SIGABRT 6 arrêt catastrophe d’un processus (abort())
SIGKILL 9 arrêt impératif
SIGTERM 15 terminaison normale d’un processus
SIGTSTP 18 suspension depuis un terminal (Ctrl-z)
SIGCONT 19 reprise de process

Recent Tweets

Catégories