Outils pour utilisateurs

Outils du site


script:expect_scp

Un petit script qui est fait avec expect

Script: import.sh
#!/usr/bin/expect -f
 
# script de récupération de fichier
# Creator : Youenn DUVAL
# Mail    : youenn.duval@barbed.fr
# Date    : 19/30/2019
 
# Description :
# Script de récupération de fichier sur un serveur passé en argument(ip) ainsi que le pass
# Exemple ./import.sh 66.66.66.66 motdepasse
# Il crée un dossier import où il recupere les fichiers et un dossier export où il stock des archives en zip.
# Conditions: il doit récuperer 3 fichiers par servers, existant et non vide.
# Il récupere ses deux fichier plus le hostname. Les mets dans dossier Import/ipduserveur puis les compressent
# dans une archivre zip correspondant au nom d'host de la machine (ex: domaine.zip)
# en cas d'erreur il précise dans le nom de l'archive si il manque un fichier ou si il y a au moins un fichier vide
 
# Amélioration possible, nettoyage du dossier import, débuggage dy systeme de logs
 
# Déclaration des variables
#-----------------------------------------------------------------
set LOGIN "loginserver"
set PASS [lindex $argv 1]
set SERVER [lindex $argv 0]
set WORK_DIR "/repertoire/de/travail"
set IMPORT_DIR "$WORK_DIR/récup"
set EXPORT_DIR "$WORK_DIR/Export"
set FILE_DIR "/emplacement/des/fichier/a/recuperer"
set FILE_1 "fichier1"
set FILE_2 "ficher2"
set LOG "log_script"
set REPORT "log_report"
 
 
# Création du répertoire de réception et d'export
#-----------------------------------------------------------------
exec mkdir -p $IMPORT_DIR/$SERVER
exec mkdir -p $EXPORT_DIR
 
# Purge Log
#-----------------------------------------------------------------
#exec echo "" > $WORK_DIR/$REPORT
 
# Récupération du fichier hostname
#-----------------------------------------------------------------
spawn scp -r -p -o StrictHostKeyChecking=no $LOGIN@$SERVER:/etc/hostname $IMPORT_DIR/$SERVER
expect {
          "*password:*" { send $PASS\r\n; interact }
          eof { exit }
}
# Création de la variable hostname
set f [open "$IMPORT_DIR/$SERVER/hostname"]
set HOSTS [read $f]
close $f
set HOSTNAME [lindex [split $HOSTS \n] 0]
 
 
# Récupération du premier fichier
#-----------------------------------------------------------------
spawn scp -r -p -o StrictHostKeyChecking=no $LOGIN@$SERVER:$FILE_DIR/$FILE_1 $IMPORT_DIR/$SERVER
expect {
          "*password:*" { send $PASS\r\n; interact }
          eof { exit }
}
 
# Recupération du second fichier
#-----------------------------------------------------------------
spawn scp -r -p -o StrictHostKeyChecking=no $LOGIN@$SERVER:$FILE_DIR/$FILE_2 $IMPORT_DIR/$SERVER
expect {
         "*password:*" { send $PASS\r\n; interact }
         eof { exit }
}
 
# Les fichiers existe t il ?
#-----------------------------------------------------------------
set NUM_FILE 0
foreach f [glob $IMPORT_DIR/$SERVER/*] {
    set NUM_FILE [expr {$NUM_FILE + 1}]
}
# puts "Il y a $NUM_FILE fichiers dans le repertoire $SERVER"
if { $NUM_FILE < 3 } {
  # puts "Il manque un fichier"
  exec echo "Manque fichier serveur $SERVER" >> $WORK_DIR/$REPORT
  set HOSTNAME "$HOSTNAME-Error_num_File"
}
 
# Les fichiers sont ils egale à zero ?
#-----------------------------------------------------------------
set CONTROL 1
foreach f [glob $IMPORT_DIR/$SERVER/*] {
    set FILE_SIZE [file size $f]
    if {[file size $f] == 0} {
      puts "fichier à zero"
      exec echo "Le fichier $f a une taille égale a 0" >> $WORK_DIR/$REPORT
      set HOSTNAME "$HOSTNAME-Error_empty_file"
    }
}
 
# Compréssion du fichier
exec zip -rj $EXPORT_DIR/$HOSTNAME $IMPORT_DIR/$SERVER
 
puts "End"
puts ""
script/expect_scp.txt · Dernière modification: 2019/03/25 14:23 par draak