Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SFTP] Script de connexion et téléchargement

Automatisation de connexion et de téléchargement sur un serveur sftp

Sujet résolu
    28 octobre 2013 à 15:03:50

    Bonjour à tous,

    J’utilise SFTP pour télécharger des fichier du serveur distant à ma machine et je souhaite mettre en place un script shell dans un cron pour cela. Le but de ce script est de se connecter au serveur par sftp (entièrement automatisé sans intervention humaine) et télécharger un document pdf tous les 30 minutes.

    J’ai réussi à faire un script qui marche très bien en utilisant une authentification par clé privée lorsque je le lance directement en ligne de commande. Mais le problème c’est que ca ne fonctionne pas si je le lance via crontab. Ca m’affiche l’erreur suivant :

    Permission denied, please try again.
    Permission denied, please try again.
    Permission denied (publickey,password,keyboard-interactive).
    Couldn't read packet: Connection reset by peer
    cp: cannot stat `Pending Workload Affinity Regular with parameters-en.pdf': No such file or directory

    Voici mon script intitulé "dworker":

    #!/bin/bash
    
    cd /home/benks21
    
    /usr/bin/sftp -oPort=2223 benks@88.23.38.72 << EOT
    
    cd download
    get worker-en.pdf
    bye
    bye
    EOT
    
    dt='+%d-%m-%Y-%H:%M:%S'
    dtp=`date $dt` #recuperation de la date lors du moment du téléchargement pour le mettre dans le nom du fichier
    
    cp worker-en.pdf /home/benks21/workerhistory/worker-en$dtp.pdf

    et voici mon crontab

    */30 * * * * /home/benks21/./dworker >> /home/benks21/dworker.log 2>&1



    Merci d'avance pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      28 octobre 2013 à 16:51:10

      Et t'as essayé avec la commande scp qui permet de copier un fichier à travers SSH ?
      • Partager sur Facebook
      • Partager sur Twitter
        29 octobre 2013 à 7:21:38

        L'admin réseau du serveur distant insiste sur le fait que ce soit par sftp et uniquement par authentification par clé, il ne m'a même pas donné le mot de passe du compte auquel je dois me connecté (j'ai envoyé la clé publique par mail), les autres options ne marchera pas, pour une question de sécurité il me disait. Tout de même j'ai essayer avec scp et ça n'a pas marcher, pour info le fichier à copier comporte des espaces et je sait pas si le problème vies de la:

        $ scp -P 2223 benks@88.23.38.72:'worker en.pdf' .
        /sbin/nologin: No such file or directory
        $ scp -P 2223 benks@88.23.38.72:worker\ en.pdf .
        /sbin/nologin: No such file or directory

        Je tiens à préciser que lors de la génération des clés j'ai entré une passphrase et j'utilise ssh-agent pour éviter d'entrer la passphrase à chaque fois, j'ai refait le même scenario sur mon réseau locale, j'ai généré les clés avec une passhprase et c'est le même problème, j'ai encore refait le même scénario mais cette fois si j'ai pas entrer de passphrase lors de la génération des clés et là tous fonctionne sans problème. Le problème est que l'entreprise propriétaire du serveur distant est très stricte, j'ai passé ma chance et je peu pas leur demandé de changer la clé publique :(

        • Partager sur Facebook
        • Partager sur Twitter
          29 octobre 2013 à 11:41:58

          Tu peux peut-être enlever la passphrase de ta clef privée ?

          Sinon, utilise des chemins absolus !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! toujours dans des scripts.

          Sinon, ton script est exécuté par cron, mais a-t-il accès à ssh-agent vu qu'il est dans un environnement différent ? j'en doute. Il faudrait plutôt que tu utilises un heredocument comme tu l'as fait dans ton script pour entrer la passphrase lors de l'initialisation de la connexion SFTP.

          • Partager sur Facebook
          • Partager sur Twitter
            29 octobre 2013 à 16:09:26

            J'ai enlevé la passphrasse de la clef privée et maintenant ça fonctionne nickel, merci beaucoup à vous tous.  Voici la commande que j'ai utilisé pour enlever la passphrase, peut-être que ça aide a d'autre personne confronté au même problème

            $ ssh-keygen -p -f ~/.ssh/id_rsa
            Enter old passphrase:
            Key has comment '/home/mlx/.ssh/id_dsa'
            Enter new passphrase (empty for no passphrase):
            Enter same passphrase again:
            Your identification has been saved with the new passphrase

            Tape juste sur la touche entrer pour enlever la passphrase.

            Juste par curiosité, si je décide d'entrer la passphrase dans le script, comment je fait pour éviter de taper la passphrase sur le clavier ? Car si je fais comme ça :

            #!/bin/bash
             
            eval `ssh-agent -s``
            ssh-add
            
            sftp -oPort=2222 benks@88.23.38.72
            
            ...

            Le script va me demander de taper la passphrase, or je sais pas comment contourner ce problème, faut-il uitliser expect ? 

            Merci



            • Partager sur Facebook
            • Partager sur Twitter
              29 octobre 2013 à 16:24:14

              Non, tu l'as déjà fait dans ton script précédent avec un heredocument:

              /usr/bin/sftp -oPort=2223 benks@88.23.38.72 <<EOT
              MotDePasse

              MotDePasse

              commandes_SFTP

              EOT

              • Partager sur Facebook
              • Partager sur Twitter
                30 octobre 2013 à 5:35:53

                ah ok, merci j'ai compris :)
                • Partager sur Facebook
                • Partager sur Twitter

                [SFTP] Script de connexion et téléchargement

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown