[FTP] entre 2 serveurs

Résolu
Bonjour,

Je souhaiterais utiliser des données d'un serveur de TEST sur un autre serveur (les deux Unix).

Comment faire pour transférer les données du serveur de TEST vers le serveur de traitement?

J'ai déjà un FTP sur le serveur de TEST, mais c'est lourd de faire des copier-coller du contenu des fichiers à traiter.
Comment faire pour que ces fichiers arrivent directment sur le serveur de Traitement?

Sur le serveur de TEST, il y a déjà un CRON qui tourne et qui classe les fichiers dans les bons répertoires.
Dans le serveur de Traitement, je voudrais garder la même configuration.

Merci

13 réponses

  1. Est ce que les fichiers que tu veux transférer sont dans le même répertoire ??
    si oui:
    - de ton serveur TEST
    scp /.../.../* nomutili@serveurtraitement:/emplacement/
    - de ton serveur TRAITEMENT
    scp nom_utili@serveurTEST:/emplacement/* .

    ceci suppose que tu as un serveur ssh d'installer ...
    1
    1. ça marche aussi pour transférer des répertoires, ou c'est seulement sur des fichiers ?
      0
  2. si tu mets l'option -r ca sera récursif donc tous les répertoires seront copier aussi
    exemple
    -essai
    |---script
    | |---essai.pl
    |---script.pdf

    scp -r essai/ toto@traitement:temp/
    te copira tout le repertoire essai avec ce qu'il contient ...

    Je ne sais pas si je suis très clair ...

    ++
    0
    1. Si ça va j'ai compris
      Je tente de le faire avec un CRON sous de serveur TEST
      Par contre, je ne peux pas faire de CRON sous le serveur Traitement car je n'ai pas les droits...
      En même temps, moi je veux que le tansfert ne se fasse que dans le sens TEST ==> Traitement

      Ca peut marcher ?
      0
  3. aucun problème...
    syntaxe: scp source destination

    ++
    0
    1. Est-ce que ça peut marcher dans un CRON ?
      C'est à dire pour le lancer toutes les 20 min ?
      0
  4. Est-ce que c'est possible de faire un shell pour pouvoir l'utiliser dans le CRON ?

    la commande scp ne fonctionne pas
    0
    1. Contributeur
      Salut Sandrill0n,

      Utiliser scp en mode batch suppose que tu gères une authentification automatique. C'est faisable, mais c'est un peu compliqué à mettre en place (avec des certificats).

      Vu que tu as déjà un serveur FTP sur le serveur d'origine des données et qu'il s'agit simplement d'en downloader le contenu, tu pourrais simplement utiliser wget pour ce faire. Cet outil permet de downloader récursivement le contenu de répertoires et se trouve en général installé sur tous les Linux.

      Vois :

      http://www.commentcamarche.net/forum/affich-1332787#2

      Que l'accès ftp soit anonyme ou nécessite un mot de passe, tu peux t'en servir en mode batch.

      Dal
      0
      1. Ben je suis désolée mais wget ne fonctionne pas non plus...

        Je travaille sous Unix (Solaris)

        Je me suis peut-être mal exprimée...
        En fait, ce que je voudrais c'est tranférer un fichier d'un serveur Unix (Test) vers un autre serveur Unix (Données). Je voudrais que cet envoi soit automatisé dans un CROn (comme la génération du fichier que je souhaite récupérer).

        Un programme shell existe avec cette commande (parmis tout le traitement des fichiers qui ne m'interresse pas) :
        ftp -v -i -n server <<-%
        user login passwd


        Mais pour le reste (récupération du fichier voulu) je ne sais pas comment faire...
        0
    2. Contributeur
      Salut,

      1.

      Ben je suis désolée mais wget ne fonctionne pas non plus...

      Oui c'est désolant... car wget fonctionne très bien. Tu ne fournis aucune indication sur la syntaxe que tu as utilisée et les messages d'erreur que tu as pu avoir.

      Je travaille sous Unix (Solaris)

      wget est un programme GNU. J'ignore si celui-ci est installé sur ta version de Solaris et si les options sont les mêmes. Voilà la page de manuel de wget http://annys.eines.info/cgi-bin/man/man2html?wget+1

      Compare la avec ta page de manuel man wget (et lis là aussi).

      En fait, ce que je voudrais c'est tranférer un fichier d'un serveur Unix (Test) vers un autre serveur Unix (Données)

      Je croyais que tu voulais récupérer un grand nombre de fichiers ?

      2.

      Pour récupérer un seul fichier, tu peux faire un script shell comme celà :

      DDirectory="/le/rep/distant/"
      LDirectory="/le/rep/local/"
      Username="toto"
      Password="totopasswd"
      Server="ftp.monserveur.net"
      
      ftp -i -n $Server <<End-Of-Session
      user $Username $Password
      binary
      bell
      lcd $LDirectory
      cd $DDirectory
      get lefichierarecuperer
      bye
      End-Of-Session


      Avec wget, tu fais celà :

      cd /le/rep/local/
      wget ftp://toto:totopasswd@ftp.monserveur.net/le/rep/distant/lefichierarecuperer


      3.

      Si en fait tu veux récupérer un grand nombre de fichiers tous situés dans un répertoire avec d'éventuels sous-répertoires et tu ne veux pas tous les taper, tu devras utiliser un autre outil qui ait des fonctions de récursivité, sauf à ce que le client ftp de Solaris ait déjà ces fonctionnalités (ce dont je doute, mais tu peux consulter man ftp pour voir). Ce n'est pas le cas du client ftp de Linux et de FreeBSD en tout cas.

      Si tu veux télécharger un répertoire entier et son contenu récursivement, en utilisant wget, tu fais wget ftp://toto:totopasswd@ftp.monserveur.net/le/rep/distant/

      Avec les options :

      --no-host-directories
      --cut-dirs=number
      --recursive
      --level=depth

      Tu peux contrôler la façon dont l'arborescence est reconstruite localement et le niveau de récursion.

      4.

      Je voudrais que cet envoi soit automatisé dans un CROn (comme la génération du fichier que je souhaite récupérer).

      Sauf erreur, ce que tu veux faire, ce n'est pas un "envoi", c'est un "téléchargement". Quant à la façon dont le fichier que tu récupères est généré, sauf erreur également, celà n'a pas de rapport avec ta question.

      En tout état de cause, je suppose que tu sais faire une entrée crontab.

      5.

      Un programme shell existe avec cette commande (parmis tout le traitement des fichiers qui ne m'interresse pas)

      Je suppose que tu veux dire que tu as trouvé un script sur ta machine qui a été fait par quelqu'un d'autre et qui, entre autres choses, scripte la commande ftp comme tu l'indiques. Mais c'est un peu elliptique.

      6.

      Teste le script que tu réaliseras en le lançant manuellement avant de le tester dans un crontab. Dans ton script shell mets les chemins absolus de toutes les commandes utilisées. Si le script fonctionne mais pas le CRON, regarde les messages d'erreur dans les logs de CRON.

      Dal
      0
      1. Merci pour toutes ces infos...

        Je vais essayer et voir si ça marche

        Je mettrai les résultats...
        0
    3. Alors, chose promise, chose due....

      Les Username et Password ont été modifiés (confidentialité oblige)

      Programme shell : "send_to_volnay"
      #!/usr/bin/csh
      
      DDirectory="/home/synergy/sandra/ROYAT/"
      LDirectory="/export/home/kthmgr/crondir/"
      Username="sandra"
      Password="azerty"
      Server="httpsyn"
      
      ftp -i -n $Server <<End-Of-Session
      user $Username $Password
      ascii
      bell
      lcd $LDirectory
      cd $DDirectory
      get pareto.log
      bye
      End-Of-Session
      


      Résultat du lancement manuel :
      DDirectory=/home/synergy/sandra/ROYAT/: Command not found
      LDirectory=/export/home/kthmgr/crondir/: Command not found
      Username=sandra: Command not found
      Password=azerty: Command not found
      Server=httpsyn: Command not found
      Server: Undefined variable
      


      Apparement, ça a pas l'air de marcher...
      0
      1. Modérateur
        1) Solution par ssh

        Tu peux utiliser le scp comme dit précedemment sous réserve :

        - que tes serveurs ssh (service sshd start) soient lancés sur les serveurs, et que les clients possèdent un client ssh (ssh) !
        - pour contourner l'identification, que tu génère des clés ssh.

        2) Solution par ftp

        Sinon par rapport au ftp tu as des alternatives comme sftp (à mi chemin entre ftp et ssh). Je me demande si un bon vieux lftp pour la solution ftp pur ne te permettrait pas de stocker les favoris et te permettre de te connecter direct...

        3) Solution par wget

        Ca marche si tes serveurs ont un serveur http de lancé (httpd, apache...), et que les fichiers sont situés dans l'arborescence de ton site (/var/www/html/...)

        Bonne chance
        0
        1. Contributeur
          Hello :)

          Sandrill0n :

          La syntaxe de déclation de variables que je t'ai donnée dans mon exemple vaut pour le shell sh. Si tu utilises csh, tu dois utiliser la syntaxe du C shell pour la déclaration de variables :

          set DDirectory="/home/synergy/sandra/ROYAT/"
          set LDirectory="/export/home/kthmgr/crondir/"
          set Username="sandra"
          set Password="azerty"
          set Server="httpsyn"

          Celà devrait passer sans erreurs de syntaxe désormais.

          mamiemando :

          wget est un client ftp aussi et qui gère non seulement la récursion comme je l'indiquais, mais aussi la continuation d'un transfert interrompu (option -c). Je parle de ma version qui est GNU Wget 1.8.2, mais ces fonctionnalités figurent depuis longtemps dans wget.

          Dal
          0
          1. J'ai fait ce que tu m'as dit (mettre "set" devant les lignes de commandes)

            En le lançant manuellement j'obtiends ça comme erreur :
            End-Of-Session: << terminator not found


            Ca veut dire quoi ?
            0
          2. Modérateur
            Vu Dal ;o) J'utilise pas souvent wget ;o)
            0
        2. Contributeur
          Re :)

          Je ne suis pas très familier du C Shell. Apparemment il exige aussi que l'indicateur de terminaison soit échappé.

          Essaye comme celà :

          ftp -i -n $Server << \End-Of-Session
          user $Username $Password
          ascii
          bell
          lcd $LDirectory
          cd $DDirectory
          get pareto.log
          bye
          \End-Of-Session


          Dal
          0
          1. Re tout le monde !!!

            J'ai fais un super programme ksh qui marche nickel en manuel :
            sendlog_to_volnay
            #!/bin/ksh
            ##################################
            #Envoi de pareto.log vers Volnay #
            ##################################
            
            #On se met dans l'inbox (directory d'envoi dans synergy)
            cd ${KI_DIR_CRONDIR}   #var d'env pour : /export/home/kthmgr/crondir/
            
            #y a t-il des fichiers a envoyer?
            rep=$(/usr/bin/ls)
            if [ "$rep" != "" ]
            then
            	
            	#On fait un ftp sur volnay uniquement si elle repond au ping
            	PING=`/usr/sbin/ping httpsyn | grep -i alive | wc -l`
            	if [ $PING = 1 ]
            	then
            		ftp -v -i -n httpsyn <<-%
            		user sandra Azerty
            		ascii
            		put sm3_0.log
            		put sm2_5.log
            		put sm3_5.log
            		put sm5ap.log
            		put sm5lp.log
            		put sm5cb.log
            		put hdtmos.log
            		close
            		bye
            		%
            		
            	fi
            	
            fi


            Donc, il marche très bien quand je le lance dans le shell.

            Par contre quand je l'insère dans le CRON, plus rien...
            Je ne reçoit pas les fichiers sur mon autre serveur...
            J'ai fais les fichiers de sortie et d'erreur et voici le résultat :
            fichier de sortie :
            Connected to httpsyn.ea.freescale.net.
            220 volnayc2 FTP server (Version 1.1.214.8 Fri Apr 20 07:27:42 GMT 2001) ready.
            331 Password required for sisa01c.
            230 User sandra logged in.
            ?Invalid command
            200 Type set to A.
            200 PORT command successful.
            553 Could not determine cwdir: No such file or directory.
            ?Invalid command
            ?Invalid command
            221 Goodbye.
            

            Fichier d'erreur :
            /export/home/kthmgr/crondir/sm3_0.log: No such file or directory
            /export/home/kthmgr/crondir/sm2_5.log: No such file or directory
            /export/home/kthmgr/crondir/sm3_5.log: No such file or directory
            /export/home/kthmgr/crondir/sm5ap.log: No such file or directory
            /export/home/kthmgr/crondir/sm5lp.log: No such file or directory
            /export/home/kthmgr/crondir/hdtmos.log: No such file or directory
            


            Comment puis-je faire pour pouvoir lancer ce script dans le CRON ?
            Faut-il faire une autre manip à la place du script ?
            0
            1. Re !

              Comment puis-je faire pour copier un répertoire entier en utilisant cette methode ?

              #On se met dans l'inbox (directory d'envoi dans synergy)
              cd /var/opt/applications/mo/   
              
              pwd
              
              #y a t-il des fichiers a envoyer?
              rep=$(/usr/bin/ls)
              if [ "$rep" != "" ]
              then
              	
              	#On fait un ftp sur volnay uniquement si elle repond au ping
              	PING=`/usr/sbin/ping httpsyn | grep -i alive | wc -l`
              	if [ $PING = 1 ]
              	then
              		ftp -v -i -n httpsyn <<-%
              		user sandra Azerty
              		#ascii
              		cd /home/synergy/sandra/WAFER/
                              pwd
              		put Report -r
              		close
              		bye
              		%
              		
              	fi
              	
              fi


              Le répertoire Report est celuique je veux copier

              Quand je lance le programme j'ai ce message d'erreur :
              "Report: not a plain file"
              0
              1. Contributeur
                Je comprends que "Report" est un répertoire local et que tu veux en uploader le contenu sur ton serveur ftp.

                Tu fais un "lcd" dans "Report" et tu fais un "mput *"

                voir "man ftp"

                S'il y a des sous-répertoires dedans, et que tu veux les transférer aussi, il te faudra utiliser un client ftp récursif (cf. mon post <10> où j'ai déjà traité la question).

                Dal
                0
                1. Salut Dal,

                  dans ton post <10> tu raportes justement que le client FTP sur Linux par defaut n est pas recusrif.

                  Sais-tu lequel a cette fonction de recursivite pour uploader beacoup de fichiers et repertoires ?

                  Merci
                  0
                2. Contributeur
                  @redlightdistrictSalut Redlightdistrict,

                  Une réponse est dans ce même post <10>, dans sa partie 3 : wget est, entre autres choses, un client ftp avec des fonctions de récursivité (et même de continuation de transferts interrompus), avec la syntaxe mentionnée et en utilisant les options de ligne de commande qui te conviennent (dont j'ai également donné un échantillon).

                  Vois man wget

                  wget est souvent installé par défaut sur les distributions Linux.

                  Dal
                  0