Comment faire du ssh avec un délai d'attente dans un script?
Je suis l'exécution d'un script de connexion par mot de passe de moins en SSH sur une machine distante. Je veux définir un délai d'expiration, de sorte que si l'hôte distant est de prendre un temps infini à courir, je veux sortir de cette session ssh et continuer les autres lignes dans mon script sh.
Aucune idée sur comment le faire?
- Cela devrait sans doute être fermé pour être en ligne avec la fermeture complète d'un duplicata de cette comment diminuer la connexion ssh valeur de timeout [fermé]
- Si vous redirigé ici que pour "rester plus de temps dans votre
ssh
session" (à la question "Comment augmenter le délai d'attente de Connexion SSH?"), c'est le mauvais endroit. La réponse est dans le ce lien sur ssh-timeout.
Vous devez vous connecter pour publier un commentaire.
Où 10 est le temps en secondes.
Utiliser le
-o ConnectTimeout
et-o BatchMode=yes -o StrictHostKeyChecking=no
.ConnectTimeout garde le script à partir de la pendaison, BatchMode la garde de la pendaison avec l'Hôte inconnu, OUI pour ajouter à known_hosts et StrictHostKeyChecking ajoute l'empreinte automatiquement.
**** NOTE ****
Le "StrictHostKeyChecking" a été conçu uniquement pour les réseaux internes où vous avez confiance, vous accueille. Selon la version du client SSH, "Êtes-vous sûr que vous voulez ajouter votre empreinte digitale" peut provoquer le client pour accrocher indéfiniment (principalement les anciennes versions en cours d'exécution sur AIX). La plupart des versions modernes ne souffrent pas de ce problème. Si vous avez à traiter avec les empreintes digitales avec plusieurs hôtes, je recommande de garder le fichier known_hosts avec une sorte d'outil de gestion de configuration comme la marionnette/ansible/chef de cuisine/sel/etc.
-o StrictHostKeyChecking=no
pas de répondre à la question, mais c'est une très mauvaise idée si vous vous souciez de la sécurité, qui pourrait être la raison pour laquelle vous êtes à l'aide de SSH en premier lieu.StrictHostKeyChecking=no
si vous vous souciez de la sécurité à tous. @Doug: le script ne sera pas suspendu - il va juste insister pour que vous ssh sur l'hôte distant manuellement la première fois, il fait la connaissance de l'hôte. Mais il va vous protéger contre les attaques de type MITM. Merci de modifier cette réponse afin de refléter ce qu'il est très dangereux de conseils comme il est. Et il n'était même pas demandé.essayez ceci:
délai exécute la commande ssh (avec des arguments) et envoie un signal SIGTERM si ssh n'est pas de retour au bout de 5 seconde.
pour plus de détails sur le délai d'attente, la lecture de ce document:
http://man7.org/linux/man-pages/man1/timeout.1.html
ou vous pouvez utiliser le paramètre de ssh:
brew install coreutils
et ensuite utilisergtimeout
(source: stackoverflow.com/questions/3504945/timeout-command-on-mac-os-x ).timeout 3s ssh user@server 'sleep 5; echo blarg >> /tmp/blarg'
Cela tue le processus sur le client SSH côté, mais /tmp/blarg encore se modifie sur le serveur distant. Cela signifie que si vous exécutez un emballement CPU-intensive de travail sur le serveur distant, vous permettra de fuite de processus.Vous pouvez aussi vous connecter avec le drapeau
si le client SSH va envoyer un null paquet au serveur chaque
<secs>
secondes, juste pour garder la connexion.Sous Linux cela pourrait être également mis à l'échelle mondiale dans
/etc/ssh/ssh_config
ou par utilisateur dans~/.ssh/config
.Eh bien, vous pourriez utiliser nohup pour exécuter tout ce que vous êtes en cours d'exécution sur le "non-blocage de la mode". De sorte que vous pouvez garder le contrôle si tout ce qu'il était censé courir, a couru, sinon la sortie.
Donc, dans la deuxième celle que vous venez de vérifier si le fichier existe.
Si tout le reste échoue (y compris de ne pas avoir la
timeout
de commande) le concept dans ce shell script fonctionne: