213 votes

Comment se reconnecter à une session ssh déconnectée ?

Existe-t-il un moyen de se connecter à une session ssh qui a été déconnectée ? Nous rencontrons des problèmes avec notre connexion réseau à un site distant sur lequel nous travaillons séparément. Cependant, dans l'intervalle, nous constatons un grand nombre de déconnexions dues à des paquets perdus lorsque nous sommes connectés aux serveurs du site distant. Souvent, la session reste active pendant un certain temps, et parfois elle se trouve au milieu d'une action (édition de fichiers, exécution d'un processus, etc.) à laquelle je dois revenir plutôt que de la redémarrer si possible.

0 votes

Une question similaire a été posée dans unix.stackexchange.com/questions/105001/ avec quelques conseils sur la façon de contourner les déconnexions en premier lieu...

2 votes

Pour une réponse concrète, voir l'article de @march_happy. reptyr ou mon mode d'emploi ci-dessous.

184voto

kbaribeau Points 192

Essayez de définir ClientAliveInterval (par exemple 60) et TCPKeepAlive (oui ou non) à des valeurs appropriées dans le fichier sshd.conf côté serveur.

Cela devrait maintenir votre session en vie même si la connexion est perdue pendant plusieurs minutes.

32 votes

Jusqu'à présent, vous semblez être le seul à répondre réellement à la question au lieu de suggérer un écran comme solution de rechange.

3 votes

Bien vu. Nous avons trouvé cette méthode particulièrement utile lors de la traversée des pare-feu ASA/PIX de Cisco, qui, par défaut, aiment mettre fin aux connexions tcp.

8 votes

Ce n'est peut-être pas le bon endroit pour poser la question, mais est-il possible que l'affiche change de réponse ? Nous devrions ajouter la réponse "écran" (la mienne n'est pas la meilleure, j'aime bien celle de Mike Pountney, mais j'ai eu la réputation) avec cette information.

162voto

Matt Hanson Points 1929

MISE À JOUR : Pour une réponse réelle, voir la réponse de zero_r ci-dessous.

Ce n'est pas une réponse, mais une solution de contournement. Utilisez écran .

Lorsque vous vous connectez pour la première fois, exécutez l'écran. Tu obtiens un autre Shell, exécute les commandes dans celui-ci. Si vous êtes déconnecté, le processus screen maintient le terminal en vie afin que votre Shell et les processus qu'il exécute ne tombent pas. Lorsque vous vous reconnectez, exécutez 'screen -r' pour reprendre.

La configuration et l'utilisation de l'écran comportent de nombreux autres aspects, mais ce qui précède devrait résoudre votre problème.

20 votes

Ou utilisez tmux - un écran plus 'cool', j'ai utilisé les deux et préfère de loin tmux parce que vous pouvez diviser le terme joliment.

3 votes

J'ai été heureux de trouver screen était déjà installé sur mon Ubuntu 12.x, donc si vous n'êtes pas sûrs, essayez cette commande. do-release-upgrade processus : sudo screen -D -r

1 votes

@bjm88, sudo ne doit être utilisé que si la session d'écran originale a été initiée avec sudo. Sinon, il retournera comme si aucune session d'écran n'existait : There is no screen to be detached

76voto

mrbradleyt Points 800

Comme mentionné ci-dessus, Écran GNU est la voie à suivre. Il vous permet d'avoir une 'session d'écran' sur la machine distante dans laquelle vous pouvez exécuter plusieurs commandes, via plusieurs 'fenêtres d'écran'. Cette session se détache simplement si votre connexion SSH parent s'arrête, tout en conservant tous les sous-processus qui y sont exécutés.

man screen est votre ami, comme d'habitude, et le paquet de l'OS devrait être appelé screen s'il n'est pas installé par défaut.

Les éléments de base sont :

  • Démarrez une session écran (sur votre hôte distant) :

      $ screen
  • Déconnectez-vous de votre session d'écran : CTRL-A , d

  • Reconnectez-vous à votre session d'écran après vous être reconnecté :

      $ screen -d -r
  • Ouvrez une autre "fenêtre" d'écran : CTRL-A , c

  • Parcourez les fenêtres de votre écran ouvert : CTRL-A , space

Hay lots de trucs sympas que vous pouvez faire avec l'écran. Je l'utilise depuis plus de 10 ans, et je découvre toujours de nouvelles fonctionnalités. C'est mon utilitaire Unix préféré.

1 votes

Oui, c'est une bien meilleure réponse que la mienne.

0 votes

Puis-je toujours me connecter à la session ssh déconnectée, si je redémarre mon ordinateur où l'écran est en cours d'exécution ?

1 votes

Tmux est plus puissant

63voto

jwbensley Points 4092

Je ne peux pas croire que personne n'a mentionné MOSH ;

Mosh est un protocole séparé qui peut s'accrocher au processus de connexion SSH, il maintient votre session en vie après des jours de déconnexion, de changement d'IP, de latence élevée, etc. Il est expliqué sur la page d'accueil mieux que je ne peux l'expliquer, j'ai donc copié la description ci-dessous. Mon expérience et mes conseils sont les suivants : je l'utilise sur mon téléphone portable Android, c'est une bouée de sauvetage en voyage et en SSH. Il en va de même sur mon ordinateur portable lorsqu'il est connecté à mon mobile dans le train par exemple. Je recommande de compiler à partir des sources pour obtenir la dernière version, la version repo pour moi dans Ubuntu a quelques inconvénients qui sont corrigés dans la dernière version (au moment de l'écriture).

Mosh (mobile Shell)

Application de terminal à distance permettant l'itinérance, supportant l'intermittence intermittente, et fournit un écho local intelligent et une édition en ligne des des frappes de l'utilisateur.

Mosh est un remplacement de SSH. Il est plus robuste et plus réactif, surtout sur les liaisons Wi-Fi, cellulaires et longue distance.

Mosh est un logiciel libre, disponible pour GNU/Linux, FreeBSD, Solaris, Mac OS X, et Android.

Caractéristiques du site web :

  • Changer d'IP. Restez connecté : Mosh se déplace automatiquement en fonction de vos mouvements entre les connexions Internet. Utilisez le Wi-Fi dans le train, Ethernet dans un hôtel, et LTE sur une plage : vous resterez connecté. La plupart des réseaux perdent leur connexion après l'itinérance, y compris SSH et les applications Web comme Gmail. comme Gmail. Mosh est différent.

  • Pour faire de beaux rêves : Avec Mosh, vous pouvez mettre votre ordinateur portable en veille et le réveiller plus tard, en gardant votre connexion intacte. Si votre connexion Internet est interrompue, Mosh vous en avertit - mais la mais la connexion reprend dès que le service réseau est rétabli.

  • Débarrassez-vous du décalage du réseau : SSH attend la réponse du serveur avant de vous montrer votre propre saisie. Cela peut donner une une interface utilisateur médiocre. Mosh est différent : il donne une réponse instantanée à la saisie, à la suppression et à l'édition de lignes. Il le fait de manière adaptative et fonctionne même dans les programmes en plein écran comme emacs et vim. Sur une mauvaise connexion, les prédictions exceptionnelles sont soulignées. pour que vous ne soyez pas induit en erreur.

  • Pas de code privilégié. Pas de démon : Vous n'avez pas besoin d'être le superutilisateur pour installer ou exécuter Mosh. Le client et le serveur sont exécutables exécutés par un utilisateur ordinaire et ne durent que le temps de la connexion.

  • Même méthode de connexion : Mosh n'écoute pas les ports du réseau et n'authentifie pas les utilisateurs. Le client mosh se connecte au serveur via SSH, et les utilisateurs présentent les mêmes informations d'identification (par exemple, mot de passe, clé publique). que précédemment. Ensuite, Mosh exécute le serveur mosh à distance et s'y connecte via UDP.

  • Fonctionne dans votre terminal, mais mieux : Mosh est un programme en ligne de commande, comme ssh. Vous pouvez l'utiliser dans xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen, ou tmux. Mais mosh a été conçu à partir de zéro et ne supporte qu'un seul jeu de caractères : UTF-8. Il corrige les bogues Unicode des autres terminaux et de SSH. dans SSH.

  • Control-C fonctionne très bien : Contrairement à SSH, le protocole UDP de mosh gère les pertes de paquets de manière élégante, et définit la trame de l'image. de trame en fonction des conditions du réseau. Mosh ne remplit pas les tampons du réseau, donc Control-C
    fonctionne toujours pour stopper un processus qui s'emballe.

13 votes

Mosh n'est pas une enveloppe de ssh -- c'est un protocole différent, presque entièrement indépendant de ssh (il n'utilise ssh que pour la connexion).

0 votes

+1 Très vrai, mon erreur.

6 votes

Qu'en est-il de la sécurité, de l'homme du milieu ? du cryptage ? de l'échange de clés ?

24voto

march_happy Points 83

Parfois, j'ai oublié de lancer l'écran aussi et j'ai perdu mon travail inachevé. Dans ce cas, bien que nous ne puissions pas nous rattacher à une session SSH interrompue, reparenter un programme en cours d'exécution sur un nouveau terminal et reprendre ce que vous étiez en train de faire est toujours possible grâce à reptyr .

Après une déconnexion accidentelle d'une session SSH, la première chose à faire est d'exécuter screen de peur que la connexion ne soit à nouveau rompue. Ensuite, dans la nouvelle session, exécutez ps aux | grep {The process to be resumed} pour obtenir le PID. Avec le PID, vous pouvez essayer reptyr {PID} o reptyr -T {PID} (s'il existe des sous-processus) pour poursuivre le travail.

0 votes

Ça a bien marché !

6 votes

Très belle solution ! Astuce : Si reptyr n'est pas encore installé sur le serveur, et que la session interrompue qui doit être récupérée est déjà une opération de gestion de paquets comme apt upgrade de sorte qu'on ne peut pas apt install reptyr à l'instant : Il est possible de scp juste le fichier exécutable de reptyr sur le serveur et ensuite de l'exécuter comme décrit ici.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X