Calcul de checksum en passant par SFTP
Résolu
drumjoel
Messages postés
56
Statut
Membre
-
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.
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;
A voir également:
- Sftp checksum
- Md5 checksum - Télécharger - Web & Internet
- Impossible d'initialiser le protocole sftp. sftp fonctionne-t-il sur le serveur ? ✓ - Forum Linux / Unix
- Checksum error - Forum Windows
- Cmos checksum error ✓ - Forum BIOS
- BIOS CMOS checksum error ✓ - Forum BIOS
3 réponses
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...
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...
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