Calcul de checksum en passant par SFTP

Résolu
Bonjour,
J'ai créer un script qui télécharge un fichier list.txt qui contient des noms de fichier à télécharger en SFTP.
Il cherche si le fichier contenu dans list.txt est en local si oui il calcul son checksum et le compare avec celui sur le serveur distant si il sont différent on télécharge celui du serveur,
si le fichier existe pas en local on le télécharge.

Mon problème est que je passe par SSH pour calculer le checksum du fichier sur le serveur distant hors je voudrais autoriser que les connexions SFTP.

#!/usr/bin/bash
downfile=list.txt
sftp user@192.168.0.40:$downfile #telecharge le fichier list.txt
ls | grep $downfile  > /dev/null 2>&1
	if [ $? -eq 0 ]; then #test la presence du fichier $downfile
        cat "$downfile" | while read line
            do
                ls | grep $line  > /dev/null 2>&1
                if [ $? -eq 0 ]; then #test la presence du fichier $line
                    md5local=$(md5sum $line) #stocke le checksum du fichier local
                    md5distant=$(ssh user@192.168.0.40 -n md5sum $line) #stocke le checksum du fichier distant (serveur sftp)
                    while [ "$md5local" !=  "$md5distant" ]
					do
						sftp user@192.168.0.40:$line #si different on telecharge le fichier distant
						md5local=$(md5sum $line) #stocke le checksum du fichier local
					done
				else
					sftp user@192.168.0.40:$line #si le fichier n'est pas present en local on le telecharge
                fi
            done
	else exit 1;
	fi
exit 0;

3 réponses

  1. Contributeur
    Salut,

    SFTP ne pouvant pas exécuter de commandes autres que celles implémentées d'origine, je ne pense pas que ce soit possible.

    La seule solution envisageable est d'avoir un fichier MD5 sur le site associé à chaque fichier, que tu rapatrieras en même temps que le fichier source et tu pourras à partir de là faire ta vérification en te passant même des variables...
    0
    1. Ok, merci de la rapidité
      je marque donc comme résolus.
      0
      1. Contributeur
        Attends tout de même d'autres avis, j'avais bien précisé : "je ne pense pas que ce soit possible.", sans être catégorique à 100% ;-\
        0
      2. Ben mes recherche poussait dans ton sens donc j'en ai conclu que tu avais raison
        0
    2. Voici le script que j'ai réaliser et qui fonctionne
      #!/usr/bin/bash
      #Ce script telecharge un fichier dont le nom est stocker $downfile
      #le fichier $downfile contient le md5 et le nom du fichier à télécharger
      #si le fichier lister dans $down file n'existe pas en local ou n'a pas le meme checksum (md5) alors on le telecharge sur le serveur
      
      downfile=list_onco.txt
      sftp usersftp@192.168.0.40:$downfile #telecharge le fichier list_onco.txt
      ls | grep $downfile  > /dev/null 2>&1
          
      	if [ $? -eq 0 ]; then #test la presence du fichier $downfile
              cat "$downfile" | while read line
      		do
      			md5distant=$(echo $line | cut -b1-32) #recupere le md5 du fichier distant stocker dans list_onco.txt
      			nomFich=$(echo $line | cut -b34-) #recupere le nom du fichier stocker dans list_onco.txt
      			ls | grep $nomFich  > /dev/null 2>&1
              
      			if [ $? -eq 0 ]; then #test la presence du fichier $nomFich
      				md5local=$(md5sum $nomFich | cut -b1-32) #si le fihchier est présent stocke le checksum du fichier local
              
      				while [ "$md5local" !=  "$md5distant" ] #tant que le checksum local est different du checksum distant
      				do
      					sftp usersftp@192.168.0.40:$nomFich #on telecharge le fichier distant
      					md5local=$(md5sum $nomFich | cut -b1-32) #stocke le checksum du fichier telecharger dans checksum du fichier local
      				done
      			else  #si le fichier n'est pas stocker en local
      					sftp usersftp@192.168.0.40:$nomFich #on le telecharge
      					md5local=$(md5sum $nomFich | cut -b1-32) #calcul le md5sum local du fichier telecharger
      					while [ "$md5local" !=  "$md5distant" ] #tant que le checksum local est different du checksum distant
      					do
      						sftp usersftp@192.168.0.40:$nomFich #on telecharge le fichier distant
      						md5local=$(md5sum $nomFich | cut -b1-32) #stocke le checksum du fichier telecharger dans checksum du fichier local
      					done
      			fi
      		done
          else exit; #erreur
          fi
      exit 0; #aucun erreur	
      
      0