IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script de Sauvegarde via FTP sur plusieurs Routeurs


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut Script de Sauvegarde via FTP sur plusieurs Routeurs
    Bonjour à tous,

    Est-il possible de mettre en place un script pour qu'il soit capable d'aller chercher les fichiers de conf sur plusieurs routeurs en même temps ?

    Voici la base d'un script que j'ai commencé (récupération d'un seul fichier de conf):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #!/bin/sh
     
    #############################
    # DEFINITION DES PARAMETRES #
    #############################
     
    # Horodatage
    jour=$(date +%Y_%m_%d)
    heure=$(date +%r)
     
    # Fichier de LOG
    log="/sauvegardes/Routeur/log/Log_Traitement_USG_"$jour".txt"
     
    # Information Client
    client1="xxxx"
    IP1="x.x.x.x"
    PORT="xxxx"
    user1="xxxx"
    pass1="xxxx"
     
    #############################
    # DEBUT DU SCRIPT           #
    #############################
     
    # Creation fichier de LOG
    touch $log
     
    echo "Téléchargement de startup-config.conf sur "$IP1" le "date" en ""$jour"_"$client1".conf" " >>$log
     
    # Transfert FTP de startup-config.conf
    ftp -n << EOF
    open "$IP1" "$PORT"
    quote USER "$user1"
    quote PASS "$pass1"
    bin
    cd conf
    get startup-config.conf
    bye
    EOF
     
    mv startup-config.conf /sauvegardes/Routeur//""$jour"_"$client1"".conf
    Avez-vous svp une solution ?

    Merci d'avance.

    Cordialement,
    Laurent

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Bonjour,

    aller chercher les fichiers de conf sur plusieurs routeurs en même temps
    c'est un peu ambigu

    une bête boucle for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ip in $serv1 $serv2; do :recup fichier; done
    sh est une contrainte, ou tu peux utiliser un interpréteur de commandes un peu plus évolué, comme bash ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Faut-il réécrire un script ? Le bash je ne connais pas du tout...

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Faut-il réécrire un script ?
    a minima, il faut adapter l'existant.
    Le bash je ne connais pas du tout...
    c'est comme sh, avec des tableaux indexés et associatifs, et des extensions, qui permettent de se passer de certaines commandes externes.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Tu aurais une idée pour mon cas stp ? Sachant que j'ai une 100ène de routeurs différents (IP, login, mdp différents)

    Cdt,
    Laurent

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat monScript
    #!/bin/bash
     
    nomServeurs=( serv1 serv2 serv3 servN )
    declare -A ip login mdp
    ip=( [serv1]="123.456.789.123" [serv2]="123.456.789.124" [serv3]="123.456.789.125" [servN]="123.456.789.126" )
    login=( [serv1]=login1 [serv2]=login2 [serv3]=login3 [servN]=loginN )
    mdp=( [serv1]=mdp1 [serv2]=mdp2 [serv3]=mdp3 [servN]=mdpN )
     
    for serveur in "${nomServeurs[@]}"
    do
       printf '%s - %s - %s\n' "${ip[$serveur]}" "${login[$serveur]}" "${mdp[$serveur]}"
    done
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ chmod +x ./monScript
    $ ./monScript
    123.456.789.123 - login1 - mdp1
    123.456.789.124 - login2 - mdp2
    123.456.789.125 - login3 - mdp3
    123.456.789.126 - loginN - mdpN
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour ces commandes !!!

    Ne peut-on pas aussi créer un fichier .txt avec toutes les informations (nom, ip, login, mdp) pour que le script puisse taper dedans ?

    Cdt,
    Laurent

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Ne peut-on pas aussi créer un fichier .txt avec toutes les informations (nom, ip, login, mdp) pour que le script puisse taper dedans ?
    oui, bien sûr, regarde ici : comment parcourir un fichier
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Super merci pour ton aide, j'vais essayer de rédiger le script.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Je n'arrive pas trop à comprendre. Si je reprends mon script, comment fait-on pour introduire des balises créées dans un fichier .csv ? Surtout pour les lignes 29 à 42... Quel script me proposerais-tu ?

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    comment fait-on pour introduire des balises créées dans un fichier .csv ?
    je ne comprends pas
    tu peux nous afficher ton fichier csv, s'il te plaît ? et la nouvelle version de ton script, si tu l'as modifié ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    * depuis le fichier .csv pardon.

    Voici l'exemple de fichier .csv que je souhaiterais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    client1="toto1"	IP1="1.2.3.4"	user1="login1"	pass1="mdp1"
    client2="toto2"	IP2="2.3.4.5"	user2="login2"	pass2="mdp2"
    client3="toto3"	IP3="3.4.5.6"	user3="login3"	pass3="mdp3"
    Le script, je ne l'ai pas touché. Je bloque un peu... :S

  13. #13
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    c'est bien ce que je ne voulais pas comprendre, et ce n'est pas une bonne idée.
    un fichier csv est comme une table de base de données.
    ton fichier devrait ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    toto1;1.2.3.4;login1;mdp1
    toto2;2.3.4.5;login2;mdp2
    toto3;3.4.5.6;login3;mdp3
    et être lu ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while IFS=';' read serveur ip login mdp
    do
       printf 'S: %s\n\tI: %s\n\tL: %s\n\tM: %s\n' "$serveur" "$ip" "$login" "$mdp"
    done < fichier.csv
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Oui mais comment il sait que "toto1" est = à "$serveur" ?

  15. #15
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    J'ai essayé de faire ca mais ca ne fonctionne pas...

    .CSV
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    client1;1.2.3.4;login1;pass1
    client2;2.3.4.5;login2;pass2
    Script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #!/bin/bash
    # file_read
     
    #############################
    # DEFINITION DES PARAMETRES #
    #############################
     
    # Horodatage
    jour=$(date +%Y_%m_%d)
    heure=$(date +%r)
     
    # Fichier de LOG
    log="/sauvegardes/Routeur/log/Log_Traitement_USG_"$jour".txt"
     
    # Info routeur
    PORT="9021"
     
    #############################
    # DEBUT DU SCRIPT           #
    #############################
     
    FILE=$(cat /sauvegardes/Script/client.csv)
    echo $FILE
     
    for var in $FILE ;do
    	`CLIENT=`echo $var | awk -F";" '{ print $1 }'`IP=`echo $var | awk -F";" '{ print $2 }'`LOGIN=`echo $var | awk -F";" '{ print $3 }'`PASS=`echo $var | awk -F";" '{ print $4 }'`
        	echo "$CLIENT - $IP - $LOGIN - $PASS"
    done
     
    # Creation fichier de LOG
    touch $log
     
    echo "Téléchargement de startup-config.conf sur "$IP" le "date" en "$jour"_"$CLIENT".conf" " >>$log
     
     
    # Transfert FTP de startup-config.conf
    ftp -n
    open "$IP" "$PORT"
    quote USER "$LOGIN"
    quote PASS "$PASS"
    bin
    cd conf
    get startup-config.conf
    bye
     
     
    mv startup-config.conf /sauvegardes/Routeur/ZyXEL/USG/""$jour"_"$CLIENT"".conf
    Lors du lancement du script j'ai des erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    root@test:~# /sauvegardes/Script/Sauvegarde_USG_test.sh
     "client2;2.3.4.5;login2;pass2"
    /sauvegardes/Script/Sauvegarde_USG_test.sh: ligne26: Caractère de fin de fichier (EOF) prématuré lors de la recherche du « ` » correspondant
    /sauvegardes/Script/Sauvegarde_USG_test.sh: ligne48: Erreur de syntaxe : fin de fichier prématurée

  16. #16
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Bon du coup j'ai réécris le script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    FILE=$(cat /sauvegardes/Script/client.csv)
    echo $FILE
     
    for var in $FILE ;do
    	echo $var
    	CLIENT=`echo $var | awk -F";" '{ print $1 }'`
    	IP=`echo $var | awk -F";" '{ print $2 }'`
    	LOGIN=`echo $var | awk -F";" '{ print $3 }'`
    	PASS=`echo $var | awk -F";" '{ print $4 }'`
        echo "$CLIENT - $IP - $LOGIN - $PASS"
    done
    Sauf que quand je l’exécute, les champs sont erronés:

    Par exemple pour CLIENT et PASS j'ai "toto et mdp". Pour IP et LOGIN ça a l'air d'aller.

    Avez-vous une idée svp ?

    Cdt,
    Laurent

  17. #17
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    pourquoi ne reprends-tu pas le script que je t'ai montré ?

    on ne peux pas lire un fichier, ligne par ligne, avec une boucle for, car elle tourne sur chaque mot défini en fonction de l'IFS.

    il y a au moins deux commandes qu'on ne devrait pas rencontrer dans un script : ls, et cat.

    appeler awk, autant de fois que cela semble nécessaire pour couper simplement une ligne est inutile, cut serait plus économique, mais cela fait partie des commandes que bash (grâce à ses extensions) permet de ne pas utiliser.

    tu nous a parfaitement montré ce qu'il ne faut pas faire (je m'en souviens, j'ai été débutant moi aussi)

    Oui mais comment il sait que "toto1" est = à "$serveur" ?
    parce que dans ton fichier csv, qui est une petite table de base de données, les champs sont organisés de cette façon.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    lol oui désolé. C'est vrai que dans ce domaine j'suis nul...

    J'ai donc rererefais le script mais toujours pareil au niveau des valeurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while IFS=';' read CLIENT IP LOGIN MDP
    do
       printf 'S: %s\n\tI: %s\n\tL: %s\n\tM: %s\n' "$CLIENT" "$IP" "$LOGIN" "$MDP"
    done < /sauvegardes/Script/client.csv
    J'ai toujours:

    S: "toto1
    I: 1.2.3.4
    L: login1
    M: mdp1"
    S: "toto2
    I: 2.3.4.5
    L: login2
    M: mdp2"

  19. #19
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    J'ai donc rererefais le script mais toujours pareil au niveau des valeurs:
    pour CLIENT et PASS j'ai "toto et mdp". Pour IP et LOGIN ça a l'air d'aller.
    quel est le problème ? ton csv est organisé ainsi :CLIENT;IP;LOGIN;MDP, non ?
    le fichier csv a été écrit sur linux ?


    PS: les variables en majuscules sont réservées, par convention, aux variables d'environnement. Tu peux panacher maj. et min.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Ben c'est juste que pour CLIENT il me rajoute un " devant et pour MDP un " derrière.

    Pour être sur que le fichier soit au format linux, je balance "dos2unix"


    Le problème n'est pas fini car quand je rajoute "$IP" et "$CLIENT" dans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Téléchargement de startup-config.conf sur "$IP" le "$jour" en ""$jour"_"$CLIENT"".conf" >> $log
    il ne va pas me chercher les valeurs

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. VPN sur plusieurs routeur
    Par polo(31) dans le forum Hardware
    Réponses: 9
    Dernier message: 10/07/2007, 00h34
  2. [IIS6][Débutant] FTP sur plusieurs sites
    Par daner06 dans le forum IIS
    Réponses: 5
    Dernier message: 30/03/2007, 17h43
  3. Écrire le log des Erreurs via FTP sur UNIX
    Par Alnsam dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 07/03/2007, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo