Parfois, je redémarre un appareil et j'ai besoin de ssh
revenir quand il est prêt.
Je veux exécuter la commande ssh toutes les 5 secondes jusqu'à ce que la commande réussisse.
Ma première tentative:
watch -n5 ssh [email protected] && exit 1
Comment puis-je faire ceci?
Réponses:
Une autre option serait d'utiliser
until
.Si vous faites cela à plusieurs reprises pour un certain nombre d'hôtes, mettez-le dans une fonction de votre
~/.bashrc
.la source
$
au lieu de l'invite :-)ssh
pouvez quitter avec un état différent de zéro après vous être connecté avec succès si quelque chose d'extérieur à la connexion met fin à la session, auquel cas ce script tentera de se reconnecter. Cela peut ou non être un effet secondaire souhaitable.Le
!!
pour répéter la dernière commande.la source
OpenSSH a un
ConnectionAttempts
paramètre qui fait presque ce que vous voulez. La valeur par défaut est 1 mais vous pouvez la modifier dansssh_config
ou sur la ligne de commande:Malheureusement, vous ne pouvez pas régler l'intervalle de tentative qui est fixé à 1 seconde, mais vous pouvez régler le délai d'expiration de la connexion
ConnectTimeout
(en secondes) de la même manière.la source
la source
while ! nc -w5 -z host.example.com 22; do [...]
.autossh
maintient les sessions ssh en vie. Avec les bons paramètres, vous pouvez également le lancer lorsqu'il est actuellement impossible de se connecter et il essaiera jusqu'à ce qu'il réussisse. Cela fonctionne bien, mais si vous voulez que la partie re connect fonctionne correctement avec les sessions interactives, vous devrez la combiner avecscreen
ou équivalent.Je recommande ceci:
Mais consultez sa page de manuel pour plus de détails. Avec les paramètres ci-dessus,
autossh
essaiera de lancer ssh toutes lesAUTOSSH_POLL
secondes, leAUTOSSH_GATETIME=0
fera réessayer si le premier essai échoue (donc définitivement ce que vous voulez),-M 0
désactive la vérification de connexion par autossh, toutes les options ultérieures sont passées à ssh. Les deux-o
options font quitter ssh si les connexions chutent pendant plus de 5 secondes.la source
Au risque de simplement lancer du code sur une réponse, ce script fonctionne pour moi au quotidien. Je l'appelle
ressh
et il peut être utilisé aussi simplementressh {hostname}
ou avec précaution,ressh -S {session_name} {hostname}
la source