Script transfert d'info + Expect
Résolu/Fermé
Maillon
Messages postés
156
Date d'inscription
mardi 4 octobre 2005
Statut
Membre
Dernière intervention
15 avril 2011
-
19 juin 2007 à 10:52
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 25 mars 2009 à 15:49
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 25 mars 2009 à 15:49
A voir également:
- Script transfert d'info + Expect
- Script vidéo youtube - Guide
- We transfert - Guide
- Info pc - Guide
- Crystaldisk info - Télécharger - Informations & Diagnostic
- Wifi info view - Télécharger - Divers Réseau & Wi-Fi
10 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
19 juin 2007 à 11:56
19 juin 2007 à 11:56
Salut,
Tiens dans un 1er temps essaies de te débrouiller avec ça :
http://modp.com/release/sshpasswords/
http://www.oreilly.com/catalog/expect/chapter/ch03.html
et si l'espagnol ne te rebute pas : http://www.linuxlots.com/~barreiro/spain/expect/
J'en ai ch**r un max pour faire le script qui est donné dans ton lien et aujourd'hui encore j'avoue avoir beaucoup de mal avec la syntaxe d'expect ;-((
Bon courage.
;-))
Tiens dans un 1er temps essaies de te débrouiller avec ça :
http://modp.com/release/sshpasswords/
http://www.oreilly.com/catalog/expect/chapter/ch03.html
et si l'espagnol ne te rebute pas : http://www.linuxlots.com/~barreiro/spain/expect/
J'en ai ch**r un max pour faire le script qui est donné dans ton lien et aujourd'hui encore j'avoue avoir beaucoup de mal avec la syntaxe d'expect ;-((
Bon courage.
;-))
Maillon
Messages postés
156
Date d'inscription
mardi 4 octobre 2005
Statut
Membre
Dernière intervention
15 avril 2011
5
19 juin 2007 à 14:47
19 juin 2007 à 14:47
Merci Encore jipicy ;-)
Je pense trouver mon bonheur dedans ... (enfin j'espère car comme tu dis la synthaxe n'est pas aisé à comprendre xD).
Je poste mon script quand j'ai fini ... et surtout tout compris ^^
Je pense trouver mon bonheur dedans ... (enfin j'espère car comme tu dis la synthaxe n'est pas aisé à comprendre xD).
Je poste mon script quand j'ai fini ... et surtout tout compris ^^
Maillon
Messages postés
156
Date d'inscription
mardi 4 octobre 2005
Statut
Membre
Dernière intervention
15 avril 2011
5
20 juin 2007 à 16:01
20 juin 2007 à 16:01
Alors j'ai parcouru la doc de expect ^^ (un vrai bordel perso mais bon ^^)
J'ai fais le script suivant : (j'ai repris un scrip d'un des lien de jipicy pour voir déjà si ça marchait)
#!/usr/bin/expect -f
set timeout -1
spawn scp maillon@zeus:/home/backup/* /home/maillon/bip
expect "password: $"
send "maillon\n"
expect "\\$ $"
et voici l'erreur qu'il me met :
[maillon@athena script]$ ./expect.exp
wrong # args: should be "set varName ?newValue?"
while executing
"set timeout -1 # wait until done"
(file "./expect.exp" line 2)
Je ne pense pas que le problème vienne du script mais plutôt d'autre part ... si vous avez une idée :-)
J'ai fais le script suivant : (j'ai repris un scrip d'un des lien de jipicy pour voir déjà si ça marchait)
#!/usr/bin/expect -f
set timeout -1
spawn scp maillon@zeus:/home/backup/* /home/maillon/bip
expect "password: $"
send "maillon\n"
expect "\\$ $"
et voici l'erreur qu'il me met :
[maillon@athena script]$ ./expect.exp
wrong # args: should be "set varName ?newValue?"
while executing
"set timeout -1 # wait until done"
(file "./expect.exp" line 2)
Je ne pense pas que le problème vienne du script mais plutôt d'autre part ... si vous avez une idée :-)
dubcek
Messages postés
18753
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
7 novembre 2024
5 619
20 juin 2007 à 16:45
20 juin 2007 à 16:45
spawn scp maillon@zeus:/home/backup/* /home/maillon/bip
Je suspecterais la *, une wild card peut poser problème ici.
Je suspecterais la *, une wild card peut poser problème ici.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
dubcek
Messages postés
18753
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
7 novembre 2024
20 juin 2007 à 17:09
20 juin 2007 à 17:09
Ben je viens d'essayer et en fait ça passe (enfin chez moi ;-) ) :
$ ./essai_scp.sh spawn scp jp@mandrake:~jp/tmpfs/* . Enter passphrase for key '/home/jp/.ssh/id_dsa': dossier 100% 0 0.0KB/s 00:00 fich1 100% 0 0.0KB/s 00:00 fich_mandrake.txt 100% 0 0.0KB/s 00:00 $;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
20 juin 2007 à 16:25
20 juin 2007 à 16:25
Re-
Bon je viens de tester chez moi en adaptant un de mes scripts de connexions (ssh + halt) avec la commande "scp" et c'est bien passé...
Voilà le script en question :
;-))
Bon je viens de tester chez moi en adaptant un de mes scripts de connexions (ssh + halt) avec la commande "scp" et c'est bien passé...
Voilà le script en question :
#!/usr/bin/expect -f set force_conservative 1 ; set timeout 3 spawn scp jp@mandrake:~jp/tmpfs/fich_mandrake.txt . expect "Enter passphrase for key '/home/jp/.ssh/id_dsa':\r" send -- "mot_de_passe\r" expect -gl "\\\[*]*"Voilà d'ailleurs la sortie :
[jp@MDK rep]$ ./essai_scp.sh spawn scp jp@mandrake:~jp/tmpfs/fich_mandrake.txt . Enter passphrase for key '/home/jp/.ssh/id_dsa': fich_mandrake.txt 100% 0 0.0KB/s 00:00 [jp@MDK rep]$Essaie de partir de ce script en adaptant à ton cas (la pass-phrase notamment).
;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Maillon
Messages postés
156
Date d'inscription
mardi 4 octobre 2005
Statut
Membre
Dernière intervention
15 avril 2011
5
20 juin 2007 à 17:08
20 juin 2007 à 17:08
En fait j'ai supprimer la ligne "set timeout 3" et là tout à coup bim ça marche ... :-|
Alors je viens d'essayer ton script et il marche ^^
Peut etre que avant le "set timeout" il devait y avoir le "force_conservative 1" (comme j'ai pu le voir aussi sur un autre post) mais pourquoi ... mystère ^^
Par contre :
donc en fait j'ai mon script shell et à l'intérieur il appelle mon script expect.exp qui fait le transfère de fichier. Seulement je voulais envoyer un mail de confirmation comme quoi la copie à bien été faite donc j'ai fait ça :
echo "Copy from Zeus";
file=/home/maillon/backup_serveurs
if test -d "$file"
then
cd /home/maillon/backup_serveurs
echo "Le dossier existait deja"
else
mkdir /home/maillon/backup_serveurs
cd /home/maillon/backup_serveurs
echo "Le dossier existe maintenant"
fi
cd /home/maillon/script/copy_backup_server
./expect.exp
serveur=$(/bin/hostname)
mail -s "COPIE de sauvegarde réussie depuis $serveur" maillon@ccm.net
Seulement en faisant ça le script s'arrete après le ./expect.exp. Je pense qu'il faut que je mette dans le fichier expect.exp un truc du genre "exit". J'ai essayé de mettre eof mais il a pas aimé ^^
Alors je viens d'essayer ton script et il marche ^^
Peut etre que avant le "set timeout" il devait y avoir le "force_conservative 1" (comme j'ai pu le voir aussi sur un autre post) mais pourquoi ... mystère ^^
Par contre :
donc en fait j'ai mon script shell et à l'intérieur il appelle mon script expect.exp qui fait le transfère de fichier. Seulement je voulais envoyer un mail de confirmation comme quoi la copie à bien été faite donc j'ai fait ça :
echo "Copy from Zeus";
file=/home/maillon/backup_serveurs
if test -d "$file"
then
cd /home/maillon/backup_serveurs
echo "Le dossier existait deja"
else
mkdir /home/maillon/backup_serveurs
cd /home/maillon/backup_serveurs
echo "Le dossier existe maintenant"
fi
cd /home/maillon/script/copy_backup_server
./expect.exp
serveur=$(/bin/hostname)
mail -s "COPIE de sauvegarde réussie depuis $serveur" maillon@ccm.net
Seulement en faisant ça le script s'arrete après le ./expect.exp. Je pense qu'il faut que je mette dans le fichier expect.exp un truc du genre "exit". J'ai essayé de mettre eof mais il a pas aimé ^^
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
21 juin 2007 à 08:38
21 juin 2007 à 08:38
Re-
Essaie en lançant ton script "expect" en arrière-plan (&) et en attendant la fin de son exécution (wait) :
Essaie en lançant ton script "expect" en arrière-plan (&) et en attendant la fin de son exécution (wait) :
echo "Copy from Zeus"; file=/home/maillon/backup_serveurs if test -d "$file" then cd /home/maillon/backup_serveurs echo "Le dossier existait deja" else mkdir /home/maillon/backup_serveurs cd /home/maillon/backup_serveurs echo "Le dossier existe maintenant" fi cd /home/maillon/script/copy_backup_server ./expect.exp & wait # Éventuellement ici fait un test pour voir si ton fichier a bien été récupéré... serveur=$(/bin/hostname) mail -s "COPIE de sauvegarde réussie depuis $serveur" maillon@ccm.net;-))
Maillon
Messages postés
156
Date d'inscription
mardi 4 octobre 2005
Statut
Membre
Dernière intervention
15 avril 2011
5
21 juin 2007 à 15:37
21 juin 2007 à 15:37
Alors voilà mon script presque final ^^
----------------------------------------------------------------
#!/bin/sh
# Script de recuperation des dossiers de backup des serveurs
echo "Copy from Zeus";
file=/home/maillon/backup_serveurs
if test -d "$file"
then
cd /home/maillon/backup_serveurs
echo "Le dossier existait deja"
mv /home/maillon/backup_serveurs/* /home/maillon/archives_serveurs/
else
mkdir /home/maillon/backup_serveurs
cd /home/maillon/backup_serveurs
echo "Le dossier existe maintenant"
fi
cd /home/maillon/script/copy_backup_server
./expect.exp &
wait
cd /home/maillon/backup_serveurs
var=$(du -b /home/maillon/backup_serveurs | awk -F" " '{ print $1 }')
size="4096"
serveur=$(/bin/hostname)
# Je teste si le dossier est vide ou pas
if [ "$var" -eq "$size" ]
then
echo "pas de copie !!" |mail -s "PAS DE COPIE de sauvegarde réussie depuis $serveur" maillon@ccm.net
else
echo "copie réussie" | mail -s "COPIE de sauvegarde réussie depuis $serveur" maillon@ccm.net
fi
----------------------------------------------------------------
Et le fichier expect.exp :
#!/usr/bin/expect -f
spawn scp maillon@zeus:/home/backup/* /home/maillon/backup_serveurs
expect "password: $"
send "maillon\n"
expect "\\$ $"
J'ai utilisé une méthode assez arcaïque je pense pour tester si le dossier était vide mais j'en ai pas trouvé d'autre donc bon si vous en avez une autre je suis prenneur ^^
Et par ailleurs est ce que c'est possible de renommer les fichiers qui sont tranférés dans le dossier archives_serveurs en nom_de_fichier (qui change selon les serveurs bien sûr donc je peux pas avoir un nom de fichier fixe).la_date_du_jour
pour la date du jour j'ai déjà fait ça qui marche :
jour=$(date | awk -F" " '{ print $3.$2.$6 }')
Maintenant faut que je trouve un moyen d'ajouter cette "extension" au fichier qui est transféré à chaque fois dans le répertoire archives_serveurs. Donc en fait à chaque fois que le script sera exécuté et qu'il récupérera le fichier de sauvegarde et bien celui déjà existant sera transféré dans un autre dossier et aura l'extention .date.
Je sais pas si j'ai été bien clair ^^
En tout cas le script marche là donc pas de souci après c'est juste une optimisation on va dire ^^ Donc merci jipicy et dubcek ;-)
----------------------------------------------------------------
#!/bin/sh
# Script de recuperation des dossiers de backup des serveurs
echo "Copy from Zeus";
file=/home/maillon/backup_serveurs
if test -d "$file"
then
cd /home/maillon/backup_serveurs
echo "Le dossier existait deja"
mv /home/maillon/backup_serveurs/* /home/maillon/archives_serveurs/
else
mkdir /home/maillon/backup_serveurs
cd /home/maillon/backup_serveurs
echo "Le dossier existe maintenant"
fi
cd /home/maillon/script/copy_backup_server
./expect.exp &
wait
cd /home/maillon/backup_serveurs
var=$(du -b /home/maillon/backup_serveurs | awk -F" " '{ print $1 }')
size="4096"
serveur=$(/bin/hostname)
# Je teste si le dossier est vide ou pas
if [ "$var" -eq "$size" ]
then
echo "pas de copie !!" |mail -s "PAS DE COPIE de sauvegarde réussie depuis $serveur" maillon@ccm.net
else
echo "copie réussie" | mail -s "COPIE de sauvegarde réussie depuis $serveur" maillon@ccm.net
fi
----------------------------------------------------------------
Et le fichier expect.exp :
#!/usr/bin/expect -f
spawn scp maillon@zeus:/home/backup/* /home/maillon/backup_serveurs
expect "password: $"
send "maillon\n"
expect "\\$ $"
J'ai utilisé une méthode assez arcaïque je pense pour tester si le dossier était vide mais j'en ai pas trouvé d'autre donc bon si vous en avez une autre je suis prenneur ^^
Et par ailleurs est ce que c'est possible de renommer les fichiers qui sont tranférés dans le dossier archives_serveurs en nom_de_fichier (qui change selon les serveurs bien sûr donc je peux pas avoir un nom de fichier fixe).la_date_du_jour
pour la date du jour j'ai déjà fait ça qui marche :
jour=$(date | awk -F" " '{ print $3.$2.$6 }')
Maintenant faut que je trouve un moyen d'ajouter cette "extension" au fichier qui est transféré à chaque fois dans le répertoire archives_serveurs. Donc en fait à chaque fois que le script sera exécuté et qu'il récupérera le fichier de sauvegarde et bien celui déjà existant sera transféré dans un autre dossier et aura l'extention .date.
Je sais pas si j'ai été bien clair ^^
En tout cas le script marche là donc pas de souci après c'est juste une optimisation on va dire ^^ Donc merci jipicy et dubcek ;-)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
21 juin 2007 à 16:34
21 juin 2007 à 16:34
Re-
Bon pour vérifier l'existence ET la taille de ton fichier, utilise plutôt :
Bon pour vérifier l'existence ET la taille de ton fichier, utilise plutôt :
if [ -e "fich" -a -s "fich" ]; then...; else ...;fiPour la date c'est plus simple ça, non :
jour=$(date "+%e%B%G")Pour l'extension :
[jp@MDK tmpfs]$ echo $serveur MDK [jp@MDK tmpfs]$ ls MDK [jp@MDK tmpfs]$ if [ -e "$serveur" ]; then mv "${serveur}" "${serveur}.${jour}"; fi [jp@MDK tmpfs]$ ls MDK.21juin2007 [jp@MDK tmpfs]$;-))
Maillon
Messages postés
156
Date d'inscription
mardi 4 octobre 2005
Statut
Membre
Dernière intervention
15 avril 2011
5
21 juin 2007 à 16:53
21 juin 2007 à 16:53
Youpi ça marche et en plus j'ai compris ^^ lol
Héhé merci jipicy ;-))
Héhé merci jipicy ;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
21 juin 2007 à 16:56
21 juin 2007 à 16:56
Hé hé, de rien ;-))
Maillon
Messages postés
156
Date d'inscription
mardi 4 octobre 2005
Statut
Membre
Dernière intervention
15 avril 2011
5
25 mars 2009 à 13:58
25 mars 2009 à 13:58
Je réouvre le post car j'arrive pas à comprendre cette ligne :
expect -gl "\\\[*]*"
Je ne sais pas du tout ce que fait cette ligne et mes recherches n'ont rien donné...
Merci.
Cordialement,
expect -gl "\\\[*]*"
Je ne sais pas du tout ce que fait cette ligne et mes recherches n'ont rien donné...
Merci.
Cordialement,
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
25 mars 2009 à 15:49
25 mars 2009 à 15:49
Salut,
En fait ici expect utilise des expressions régulières globales ("-gl" en opposition à "-re" expressions régulières de grep) pour définir le prompt à venir :
un crochet ouvrant
suivi d'un nombre quelconque de caractères
puis d'un crochet fermant
suivi d'un nombre quelconque de caractères.
http://www.linuxlots.com/~barreiro/spain/expect/expect_tut-3.html#ss3.2
En fait ici expect utilise des expressions régulières globales ("-gl" en opposition à "-re" expressions régulières de grep) pour définir le prompt à venir :
un crochet ouvrant
suivi d'un nombre quelconque de caractères
puis d'un crochet fermant
suivi d'un nombre quelconque de caractères.
http://www.linuxlots.com/~barreiro/spain/expect/expect_tut-3.html#ss3.2