Dédié vers Mutualisé: ssh time out

Salut,
J’ai un petit script qui est chargé d’envoyer une fois pas semaine mes sauvegardes de mon dédié (en France) vers un Mutualisé (aux US)

[code]ssh mutu “cd /home/mutu1/backup/ ; rm *$DATE7.sql.gz ; rm *$DATE7.tar.gz ; rm *$DATE7.gz ; exit”

cd $DESTSQL
shopt -s nullglob
FICHIERS=ls *$DATE.gz
for fichier in $FICHIERS; do
scp “$fichier” mutu:/home/mutu1/backup/
done[/code]

Après que la boucle ait tourné 18 fois (soit 19 connexions en comptant la ligne 1 du script, j’ai ceci:

ssh: connect to host 216.xxx.xxx.xxx port 22: Connection timed out lost connection

J’ai inséré un “sleep” dans la boucle. Avec 5 et 10 ça plante toujours au même endroit.

Auriez vous une idée de ce qui bloque.
Quelle genre de limitation le dédié peut-il avoir ? (c’est du CentOS, je n’ai évidemment accès à presque rien…)

Avec un sleep de 30 ça passe.
Désolé pour la question à la con, il s’agit donc simplement d’une limitation du nombre de connexion (par minute peut-être).
Le script va mettre plus longtemps à se terminer, c’est tout.

:075

Re…

Je vais enlever provisoirement le “résolu”.
Est-il possible de créer cette condition dans la boucle ?

Si nous recevons un “ssh: time out” nous suspendons pendant n minutes l’exécution du scipt et reprenons ou nous en étions (sans perdre l’envoi du fichier qui a provoqué le time out).

Il va peut-être falloir déplacer mon sujet dans programmation…
Merci.

Salut,
l’option -o de ssh et scp gère cela, voir man ssh pour toutes les options

exemple:

ssh -o "ConnectionTimeout 120" root@monserveur

La commande est considérée échoué au bout de 120 secondes de timeout,

ça peut peut-être t’aider si tu intègre cela dans ta boucle.

Salut,
Merci, je vais regarder s’il y a la même chose pour scp, car c’est la boucle avec scp qui provoque le time out.

Sinon, j’avais pensé à ajouter une boucle comme ceci (et ensuite intégrer boucle avec scp au milieu)

[code]#!/bin/bash

counter=0
limit=20

while [ “$counter” -lt “$limit” ]
do
ssh -q -o “BatchMode=yes” beronono “echo 2>&1” && echo “OK” || echo "NOK"
if [[ $? = “NOK” ]]; then
echo NOK
exit
fi
count=$(($count+1))
sleep 300
echo OK
exit
done[/code]

Evidemment… ça ne fonctionne pas, je suis pas bon. Même si c’est ok, il passe sur le sleep…
Je me suis planté quelquepart! :075

[quote=“Phyliares”]Salut,
l’option -o de ssh et scp gère cela, voir man ssh pour toutes les options

exemple:

ssh -o "ConnectionTimeout 120" root@monserveur

La commande est considérée échoué au bout de 120 secondes de timeout,

ça peut peut-être t’aider si tu intègre cela dans ta boucle.[/quote]

Il y a la même pour scp, ça doit fonctionner, merci!

[quote=“man scp”]-o ssh_option
Can be used to pass options to ssh in the format used in ssh_config(5). This is useful for specifying options for which there is
no separate scp command-line flag. For full details of the options listed below, and their possible values, see ssh_config(5).[/quote]

Bon, ça fonctionne pas…
J’ai droit au time out au bout d’une dizaine de secondes

# /usr/local/scripts/scp.sh ssh: connect to host 216.xxx.xxx.xxx port 22: Connection timed out

La commande c’est ssh -o “ConnectTimeout n” et non “ConnectionTimeout n”

Apparemment ton erreur vient des nombreuses connexions rapprochées. Plutôt qu’utiliser scp dans une boucle, pourquoi ne pas essayer avec une seule connexion (sftp) ?

Ton script initial deviendrait : (note, la première commande ssh est incluse dedans)

cd $DESTSQL shopt -s nullglob FICHIERS=$(ls *$DATE.gz) sftp mutu <<EOF cd /home/mutu1/backup/ rm *$DATE7.sql.gz rm *$DATE7.tar.gz rm *$DATE7.gz $( for FICHIER in $FICHIERS; do echo "put \"$FICHIER\"" done ) EOF

On avait pas déjà discuté de ça avec toi dans la section programmation, ou je rêve ?
Edit : ah non c’était pour du FTP. Mais bon, même combat. :mrgreen:
petit-script-bash-pour-ftp-t36375.html

Salut,

[quote=“syam”]Apparemment ton erreur vient des nombreuses connexions rapprochées. Plutôt qu’utiliser scp dans une boucle, pourquoi ne pas essayer avec une seule connexion (sftp) ?

Ton script initial deviendrait : (note, la première commande ssh est incluse dedans)

cd $DESTSQL shopt -s nullglob FICHIERS=$(ls *$DATE.gz) sftp mutu <<EOF cd /home/mutu1/backup/ rm *$DATE7.sql.gz rm *$DATE7.tar.gz rm *$DATE7.gz $( for FICHIER in $FICHIERS; do echo "put \"$FICHIER\"" done ) EOF

On avait pas déjà discuté de ça avec toi dans la section programmation ?[/quote]

C’est exactement ce qu’il me faut…
Oui, j’avais déjà eu des soucis avec ce script (je ne suis pas du tout à l’aise avec ces histoires) mais pour des questions de boucle, ftp, etc…
Je n’avais à l’époque de cette discussion pas ce problème avec ssh car le nombre de connexions scp étaient moins nombreuses. J’ai ajouté depuis pas mal de sites, et du coup les connexions se sont multipliées, conduisant au time out.

Merci beaucoup, je réécrit mon script de ce pas!

Génial,
C’est parfait, beaucoup plus “propre” évidemment, et… plus rapide en plus!
Pourquoi n’y ai-je pas pensé tout seul… :blush:

Merci.

On peut pas tout le temps penser à tout. :slightly_smiling:

Je sais je déterre un sujet résolu mais bon…
ça me fait pensé, j’ai souvent de grosses latences sur certains serveurs via ssh

En fait le serveur essai de résoudre le nom du client via ses DNS lors de la conection.

Pour désactiver cette option, il faut rajouter dans le fichier /etc/ssh/sshd_config

man sshd_config

UseDNS Specifies whether sshd(8) should look up the remote host name and check that the resolved host name for the remote IP address maps back to the very same IP address. The default is “yes”.