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 shell SFTP


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Par défaut Script shell SFTP
    Bonjour à tous avant de poster ce problème j'ai cherché la réponse à mon problème par tout sur le forum et ailleurs sur internet sans succès.
    Voilà mon problème.

    Je voudrait savoir s'il est possible de faire marcher un script shell avec des commandes sftp et la fonction while IFS:read .... done <$1
    Le but est de se servir d'un fichier script qui lance les commandes grâce a des variables contenues dans un fichier de configuration.

    => Exemple du fichier script "dump_database.sh":
    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
    # !/bin/bash
     
    DAY=$(date +"%Y-%m-%d")
    touch --date "$DAY" /root/file
     
    while IFS=: read NOM_CLIENT PATH_LOCAL RACINE_FICHIER_LOCAL SERVEUR_DEPOT PATH_DISTANT
    do
            # Accès par SFTP et purge ancien fichier de sauvegarde sur serveur
            sftp $NOM_CLIENT@$SERVEUR_DEPOT <<EOF
            pwd
            "cd /$PATH_DISTANT &&
            rm $RACINE_FICHIER_LOCAL*"
     
            # Sélection fichier le plus récent de sauvegarde et envoi sur serveur
            NOM_LAST_FICH=`find $PATH_LOCAL$RACINE_FICHIER_LOCAL* -type f -newer /root/file`
            put $NOM_LAST_FICH
     
            quit
            EOF
     
    done < $1
    => Fichier de configuration "db_list.txt":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dupont:/home/postgres/:dupont_dump-:serveur-dump.societe.com:database
    laurent:/home/postgres/:laurent_dump-:serveur-dump.societe.com:database
    => Commande à lancer pour faire marcher le tout: sh dump_database.sh db_list.txt.

    De cette façon le script va se répéter autan de fois que lignes il y a dans mon fichier de configuration. De mon coté j'ai essayé de le faire marcher mais dès que j'invoque les commandes SFTP le shell me retourne une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dump_database.sh: 11: dump_database.sh: cd /database && 
            rm dupont_dump-*: not found
    Petite précision, lorsque j'utilise le même script et fichier de configuration avec une commande SCP (et partage des clés RSA) à la place des commandes SFTP ça marche sans problème. Si je m'entête à vouloir le faire passer par SFTP c'est parce qu'il m'a été demandé obligatoirement pour mesure de sécurité.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    pourquoi utiliser sh si le shebang du script est bash ?
    pourquoi y a-t-il des commandes (apparemment shell) entre guillemets ?
    pourquoi le EOF final n'est-il pas dans la première colonne du fichier script ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Par défaut
    Bonjour N_BaH,

    Comme tu as dû deviné (pas besoin d'être scientifique ) je suis loin d'être un flèche en script shell.
    Je ne suis même pas capable de répondre convenablement à tes questions.
    Dans le désordre:
    Les commandes (apparemment shell) (que moi jusqu'ici je croyait clairement shell ) sont les commandes de mon script initial que j'avait fait au début quand la sauvegarde était faite par SCP et non par SFTP j'ai dû mettre ces guillemets pour le faire marcher dans son ensemble. Quand j'ai dû adapté mon script pour le faire marcher avec des commandes SFTP j'ai pris l'existant et j'ai essayé d'adapter.
    En ce qui concerne EOF, au début quand j'ai voulu étudier les commandes de base de SFTP pour après créer le script j'a testé avec ce script simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # !/bin/bash
     
    sftp user@serveur.fr <<EOF
    cd dossier
    rm fichier-*
    put /path/fichier_sauvegarde
    quit
    EOF
    Et ça avait marché donc j'ai essayé aussi de l'adapter. Il est claire que je manque de connaissances de base mais je suis prêt à apprendre même si pour cela je vais passer pour un blaireau dans ce forum.
    Autrement excusez moi je vois que je ne pas ouvert la discussion dans la bonne rubrique.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Si, tu es dans le bon forum, mais on ne comprend pas trop ce que tu veux faire (à part passer par sftp au lieu de scp):

    En principe, scp ne fais que de la copie de flux, on ne lance pas de commande à distance avec (Et, pour les petits malins, je n'ai jamais dis que l'on ne pouvait pas le faire ), donc je ne pense pas que ton sftp doit le faire...

    Peux-tu fournir le script avec scp qui fonctionne, et on pourra peut-être voir si on peut l'adapter à sftp ?

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Par défaut
    Bonjour Disedorgue,

    Commençons donc par le commencement, c'est assez complexe. A la base il y a un serveur source, sur celui-ci il y a un dossier sur lequel tous les jours se déposent des fichiers de sauvegarde de différentes bases de données. Tous les jours le dernière fichier de sauvegarde de chaque base de données doit être envoyé vers un serveur destination dans un dossier spécifique et différent pour chaque fichier, mais avant, chaque dossier destination doit être purgé de l'ancienne sauvegarde.

    On m'a demandé (plutôt imposé ) que l'opération devait se faire grâce à un fichier script et un fichier de configuration sur lequel on va trouver les variables que le fichier script va prendre en charge.

    Alors voici le fichier 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
    # !/bin/bash
     
    if [ -f "$1" ];
    then echo "Le fichier "$1" existe"
    else echo "Le fichier "$1" n'existe pas"
    exit
    fi
     
    DAY=$(date +"%Y-%m-%d")
    touch --date "$DAY" /root/file
     
    while IFS=: read NOM_CLIENT PATH_LOCAL RACINE_FICHIER_LOCAL SERVEUR_DEPOT PATH_DISTANT
    do
     
            # Purge ancien fichier de sauvegarde sur serveur destination
            ssh $NOM_CLIENT@$SERVEUR_DEPOT "cd /home/$NOM_CLIENT/$PATH_DISTANT &&
            rm $RACINE_FICHIER_LOCAL*"
     
            # Selection nouveau fichier de sauvegarde sur le serveur source et envoi vers serveur destination
            NOM_LAST_FICH=`find $PATH_LOCAL$RACINE_FICHIER_LOCAL* -type f -newer /root/file`
            scp -pv $NOM_LAST_FICH $NOM_CLIENT@$SERVEUR_DEPOT:$PATH_DISTANT
     
    done < $1
    Et le fichier configuration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    utilisateur1:/home/postgres/:nombd_1-:serveurdistant.com:database
    utilisateur2:/home/postgres/:nombd_2-:serveurdistant.com:database
    utilisateur3:/home/postgres/:nombd_3-:serveurdistant.com:database
    Le script marchait parfaitement grâce un un clé RSA partagée entre les deux serveurs qui permettait de lancer la commande SCP sans avoir à taper le password ou le mettre en claire dans le fichier de configuration.
    Le problème c'est qu'un jour un accès SFTP a été configuré sur le serveur destination et chaque utilisateur du serveur destination partageant sa clé RSA avec le serveur source s'est vu modifier ces droits shell de /bin/bash à /bin/false et de ce fait le script utilisant la commande SCP n'est plus opératif.

    Maintenant on m'a demandé d'adapter le script on utilisant des commande SFTP à la place de SCP.
    J'espère avoir été clair (le français n'est pas ma langue maternelle) si ce n'est pas le cas je répondrait aux questions nécessaires.
    Merci d'avance.

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour,

    Je vois juste un script local qui n'a qu'une seule ligne utilisant scp.
    Qu'est-ce qui te bloque pour remplacer cette unique ligne scp par une ligne sftp ?

    [edit] Si c'est le message d'erreur du début, 3 secondes de recherche t'auraient rappelé que la commande de suppression n'est pas remove (rm) mais delete (dele) comme indiqué ICI
    [/edit]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script shell SFTP
    Par Marty000 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 18/01/2007, 09h34
  2. [JSP] script shell
    Par goolix dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/08/2004, 09h08
  3. Exécution d'un script shell
    Par Manu0086 dans le forum Linux
    Réponses: 8
    Dernier message: 15/06/2004, 16h31
  4. Explication script shell
    Par crasho007 dans le forum Linux
    Réponses: 2
    Dernier message: 14/06/2004, 13h54
  5. Cron + terminal + script shell
    Par nicolas.pissard dans le forum Linux
    Réponses: 3
    Dernier message: 17/03/2004, 09h24

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