J'exécute un script de connexion via SSH sans mot de passe sur un hôte distant. Je veux définir un délai d'expiration, de sorte que si l'hôte distant prend un temps infini à s'exécuter, je veux sortir de cette session ssh et continuer d'autres lignes dans mon script sh.
Une idée sur la façon de le faire?
ssh
session" (question "Comment augmenter le délai de connexion SSH?"), Ce n'est pas le bon endroit . La réponse est à ce lien sur ssh-timeout .Réponses:
Où 10 est le temps en secondes. Ce délai d'expiration s'applique uniquement à la création de la connexion.
la source
Utilisez le
-o ConnectTimeout
et-o BatchMode=yes -o StrictHostKeyChecking=no
.ConnectTimeout empêche le script de se bloquer , BatchMode l' empêche de se bloquer avec l'hôte inconnu, YES pour l'ajouter à known_hosts et StrictHostKeyChecking ajoute automatiquement l'empreinte digitale.
**** NOTE **** Le "StrictHostKeyChecking" était uniquement destiné aux réseaux internes où vous faites confiance à vos hôtes. Selon la version du client SSH, le message «Êtes-vous sûr de vouloir ajouter votre empreinte digitale» peut entraîner le blocage du client indéfiniment (principalement les anciennes versions fonctionnant sous AIX). La plupart des versions modernes ne souffrent pas de ce problème. Si vous devez gérer des empreintes digitales avec plusieurs hôtes, je vous recommande de maintenir le fichier known_hosts avec une sorte d'outil de gestion de configuration comme puppet / ansible / chef / salt / etc.
la source
-o StrictHostKeyChecking=no
pas à la question, mais c'est une idée terrible si vous vous souciez de la sécurité, ce qui pourrait être la raison pour laquelle vous utilisez SSH en premier lieu.StrictHostKeyChecking=no
si vous vous souciez du tout de la sécurité. @Doug: le script ne se bloquera pas - il insistera simplement pour que vous ssh vers l'hôte distant manuellement la première fois, afin qu'il apprenne à connaître l'hôte. Mais cela vous protégera contre les attaques MITM. Veuillez modifier cette réponse pour refléter cela car il s'agit d'un conseil très dangereux en l'état. Et ce n'était même pas demandé.essaye ça:
timeout exécute la commande ssh (avec args) et envoie un SIGTERM si ssh ne revient pas après 5 secondes. pour plus de détails sur le timeout, lisez ce document : http://man7.org/linux/man-pages/man1/timeout.1.html
ou vous pouvez utiliser le paramètre de ssh:
la source
brew install coreutils
puis utilisezgtimeout
(source: stackoverflow.com/questions/3504945/timeout-command-on-mac-os-x ).timeout 3s ssh user@server 'sleep 5; echo blarg >> /tmp/blarg'
Ceci tue le processus côté client SSH, mais / tmp / blarg est toujours modifié sur le serveur distant. Cela signifie que si vous exécutez un travail gourmand en ressources processeur sur le serveur distant, vous perdrez des processus.Vous pouvez également vous connecter avec flag
donc le client SSH enverra un paquet nul au serveur toutes les<secs>
secondes, juste pour maintenir la connexion active. Sous Linux, cela peut également être défini globalement dans/etc/ssh/ssh_config
ou par utilisateur dans~/.ssh/config
.la source
Si tout le reste échoue (y compris ne pas avoir la
timeout
commande), le concept de ce script shell fonctionnera:la source
Eh bien, vous pouvez utiliser nohup pour exécuter tout ce que vous exécutez en «mode non bloquant». Vous pouvez donc continuer à vérifier si tout ce qu'il était censé exécuter, s'exécuter, sinon quitter.
Donc, dans le second, vous vérifiez simplement si le fichier existe.
la source