Calcul de checksum en passant par SFTP

Résolu
drumjoel Messages postés 56 Statut Membre -  
drumjoel Messages postés 56 Statut Membre -
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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
  2. drumjoel Messages postés 56 Statut Membre 2
     
    Ok, merci de la rapidité
    je marque donc comme résolus.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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. drumjoel Messages postés 56 Statut Membre 2
       
      Ben mes recherche poussait dans ton sens donc j'en ai conclu que tu avais raison
      0
  3. drumjoel Messages postés 56 Statut Membre 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