Comment dégeler un terminal lorsque la connexion SSH est interrompue?

5

J'utilise Mac 10.9.5 avec un shell bash. Parfois, lorsque je ssh sur une autre machine et que la connexion meurt (par exemple, Internet tombe en panne ou je me déplace vers un nouvel emplacement), la fenêtre du terminal avec la session SSH ouverte est gelée et La seule façon pour moi de progresser est de la fermer et de démarrer une nouvelle session.

Existe-t-il un moyen de configurer des choses telles que, si la connexion de la session SSH meurt, je reviens à mon shell bash normal, comme avant l’exécution de ma commande SSH?

Dave
la source
Essayez de configurer ServerAliveCountMax et ServerAliveInterval dans votre ~ / .ssh / ssh_config.
Scott Dudley
@ ScottDudley pouvez-vous fournir plus de détails?
phatmann
@Phatmann par exemple. avec ServerAliveCountMax 4 et ServerAliveInterval 15, si le client SSH ne reçoit pas de réponse du serveur après 4 * 15 = 60 secondes, il doit se déconnecter automatiquement. Voir le page de manuel pour plus de détails.
Scott Dudley
return puis ~. Plus d'informations apple.stackexchange.com/questions/35524/…
Clark

Réponses:

6

Vous pouvez suspendre puis tuer le ssh processus qui a raccroché. Pour ce faire, vous devez émettre la séquence d'échappement, suspendre la ssh processus, puis utiliser kill -9 pour tuer ce processus.

La touche d'échappement par défaut du ssh livré avec OS X le ~ personnage. Vous devez le saisir immédiatement après une nouvelle ligne pour que ssh le respecte. Et puis la séquence de touches Contrôle - z est utilisé pour suspendre et mettre en arrière-plan une tâche dans bash.

Alors essayez cette séquence de touches:

Revenir

~

Contrôle - z

Si cela fonctionne, vous verrez quelque chose comme:

myhost.local:~ |ruby-2.2.0|
> ssh someremotehost
Last login: Fri Mar  6 14:15:28 2015 from myhost

someremotehost:~ |ruby-2.2.0|
> ~^Z [suspend ssh]

[1]  + 48895 suspended  ssh myremotehost

Cette ligne de sortie:

[1]  + 48895 suspended  ssh myremotehost

vous dire l'ID de processus du ssh processus sur votre machine. Ses 48895 dans cet exemple. Ce processus est toujours en cours d'exécution, il vient d'être suspendu et mis en arrière-plan. Vous devez le tuer.

Vous pouvez le faire avec le kill commander. Vous voulez le tuer avec des préjugés alors utilisez le -9 option lorsque vous appelez kill ainsi:

myhost.local:~ |ruby-2.2.0|
> kill -9 48895
[1]  + 48895 killed     ssh someremotehost

Il suffit d'utiliser le PID de votre ssh processus lorsque vous appelez cette commande à la place du 48895 PID j'ai utilisé ci-dessus.

Et vous aurez votre invite de retour.

Vous pouvez également ouvrir une seconde fenêtre de terminal et utiliser ps trouver le ssh processus dans la liste de processus et émettre le kill -9 appel contre le PID. Cependant, ce genre de processus empêche le retour de votre invite dans la fenêtre d'origine du terminal, n'est-ce pas?

Ian C.
la source