Question 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 avons des problèmes avec notre connexion réseau à un site distant sur lequel nous travaillons séparément; Cependant, dans l'intervalle, nous rencontrons un grand nombre de déconnexions en raison de paquets perdus lors de la connexion à des serveurs situés sur l'emplacement distant. Plusieurs fois, la session reste active pendant un certain temps, et parfois elle se trouve au milieu d'une action (édition de fichier, exécution d'un processus, etc.) à laquelle je dois revenir plutôt que de redémarrer si possible.


141
2018-06-04 13:04


origine


Je ne peux pas croire que personne n'a mentionné mosh.mit.edu - jwbensley
@ javano: Je n'en ai jamais entendu parler. Ajoutez cela comme une réponse! - kbyrd
@kbyrd J'ai terminé;) - jwbensley
une question similaire a été posée dans unix.stackexchange.com/questions/105001/… avec quelques astuces sur la façon de contourner les déconnexions en premier lieu ... - anarcat


Réponses:


UPDATE: 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. Utilisation écran.

Lorsque vous vous connectez pour la première fois, lancez screen. Vous obtenez un autre shell, exécutez des commandes dans ce domaine. Si vous êtes déconnecté, le processus d’écran garde le terminal en vie de sorte que votre shell et les processus qu’il exécute ne tombent pas. Lorsque vous vous reconnectez, exécutez 'screen -r' pour le reprendre.

Il y a encore beaucoup à faire pour configurer et utiliser l'écran, mais la procédure ci-dessus devrait permettre de résoudre votre problème.


126
2018-06-04 13:08



Ou utilisez tmux - un écran «plus froid», j’ai utilisé les deux et je préfère de loin tmux car vous pouvez très bien diviser le terme. - John Hunt
J'étais heureux de trouver screen était déjà installé sur mon Ubuntu 12.x, donc si vous n'êtes pas sûr d'essayer cette commande, il s'est reconnecté et a repris la do-release-upgrade processus: sudo screen -D -r - bjm88
@ bjm88, sudo doit être utilisé uniquement si la session d’écran d’origine a été lancée avec sudo. Sinon, il retournera comme s'il n'y avait pas de session d'écran: There is no screen to be detached - Noam Manos


Essayez de définir ClientAliveInterval (60) et TCPKeepAlive (oui ou non) sur les valeurs appropriées du fichier sshd.conf côté serveur.

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


118
2018-06-04 13:08



Jusqu'à présent, vous semblez être le seul à répondre à la question au lieu de suggérer l'écran comme solution de contournement. - kbyrd
Bon appel. Nous avons trouvé cette méthode particulièrement utile lors de la traversée de pare-feu cisco ASA / PIX, qui, par défaut, aiment désactiver les connexions TCP. - Mike Pountney
Peut-être que ce n’est pas le bon endroit pour demander, mais est-il possible pour l’affiche de changer de réponse? Nous devrions avoir la réponse «écran» (la mienne n'est pas la meilleure, j'aime bien celle de Mike Pountney, mais j'ai le représentant) avec cette information. - kbyrd
Cela fonctionnera-t-il lorsqu'il sera connecté via une connexion VPN Cisco et que la connexion VPN sera perdue et rétablie? - Brent
pour moi, l'écran fonctionne parfaitement, je peux me reconnecter à la tâche présélectionnée et compter au travail - integratorIT


Comme mentionné ci-dessus, Écran GNU est le chemin à parcourir. Il vous permettra d’avoir une «session d’écran» sur le boîtier distant dans lequel vous pourrez exécuter plusieurs commandes, via plusieurs «fenêtres d’écran». Cela se détachera simplement si votre connexion SSH parent meurt, en conservant tous les sous-processus actifs.

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

Les bases sont:

  • Démarrer une session d'écran (sur votre hôte distant):

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

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

    $ screen -d -r
    
  • Ouvrir une autre fenêtre 'fenêtre': CTRL-A, c

  • Parcourez vos fenêtres d’écran ouvertes: CTRL-A, espace

Il y a beaucoup de choses sympas que vous pouvez faire avec Screen. 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é.


59
2018-06-04 13:19



Oui, c'est une bien meilleure réponse que la mienne. - kbyrd
Puis-je toujours me connecter à la session ssh déconnectée si je redémarre mon ordinateur sur lequel l’écran est en cours d’exécution? - BarathVutukuri


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

Mosh est un protocole distinct qui peut être connecté au processus de connexion SSH. Il maintient votre session en vie après des jours de déconnexion, de modification de l'adresse 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. Mes expériences et mes conseils sont que je l’utilise sur mon mobile Android, c’est une bouée de sauvetage pour les voyages en SSH. La même chose est vraie sur mon ordinateur portable lorsque je suis attaché à un téléphone portable dans le train, par exemple. Je recommande de compiler à partir des sources pour obtenir la dernière version. La version de repo pour moi dans Ubuntu contient quelques inconvénients qui sont corrigés dans la dernière version (au moment de la rédaction).

Mosh (shell mobile)

Application de terminal à distance qui permet l'itinérance, prend en charge l'intermittence   connectivité, et fournit un écho local intelligent et une édition en ligne des   frappes de l'utilisateur.

Mosh remplace SSH. C'est plus robuste et réactif,   en particulier sur les liaisons Wi-Fi, cellulaires et longue distance.

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

Caractéristiques du site:

  • Changer l'adresse IP. Rester connecté: Mosh se déplace automatiquement lorsque vous vous déplacez 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 les programmes perdent leurs connexions après l'itinérance, notamment SSH et Web des applications comme Gmail. Mosh est différent.

  • Fait 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 le la connexion reprend lorsque le service réseau revient.

  • Se débarrasser du lag réseau: SSH attend la réponse du serveur avant de vous montrer votre propre frappe. Cela peut faire pour un interface utilisateur moche. Mosh est différent: il donne une réponse instantanée à la frappe, suppression et édition de ligne. Il le fait de manière adaptative et fonctionne même en plein écran des programmes comme emacs et vim. Sur une mauvaise connexion, les prédictions exceptionnelles sont soulignées afin 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 les exécutables exécutés par un utilisateur ordinaire et ne durent que pendant la durée de la connexion.

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

  • Fonctionne à l'intérieur de 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 prend en charge un seul jeu de caractères: UTF-8. Il corrige des bugs Unicode dans d’autres terminaux et en SSH.

  • Control-C fonctionne très bien: Contrairement à SSH, le protocole basé sur UDP de mosh gère la perte de paquets avec élégance et définit la trame. tarif basé sur les conditions du réseau. Mosh ne remplit pas les tampons réseau, donc Control-C
    travaille toujours pour arrêter un processus d'emballement.


41
2017-11-24 13:01



Mosh n'est pas un wrapper ssh - c'est un protocole différent, presque totalement indépendant de ssh (il utilise uniquement ssh pour la connexion). - jch
+1 Très vrai, mon erreur. - jwbensley
Qu'en est-il de la sécurité, homme au milieu? cryptage? échange de clés? - Nasir Iqbal


autossh surveille votre connexion et si elle tombe en panne, il se reconnecte. C'est plus fiable que Keepalives. Si vous vous connectez à une session d’écran, vous continuerez d’où vous vous êtes déconnecté (voir rscreen qui vient avec autossh)


19
2018-06-06 09:11



en dehors d'un Keep-Alive configurable, il ne vous permet pas de vous reconnecter à une session (ce que recherchait le PO). mais autossh peut être vraiment utile pour les applications nécessitant des tunnels SSH, le mappage de ports, etc. - ives
oui autossh + screen serait le bon choix. autossh a rscreenpour ça. - hayalci
Autossh est meilleur que Mosh. J'ai utilisé les deux. - Sridhar-Sarnobat
Voici un article de blog de Jesse Keating, sur l'utilisation de autossh avec écran. - sampablokuper


Je voudrais installer et démarrer l'écran pour résoudre votre problème. Screen vous permettra de vous reconnecter à une session d'écran précédente.

En dehors de cela, screen vous permet également de faire des choses cool comme diviser votre écran, afficher la console, etc. Vous pouvez trouver plus d'informations ici et ici.

Pour commencer, si vous êtes déconnecté, vous pouvez utiliser

screen -ls

pour voir vos sessions et

screen -r ${session} 

pour vous reconnecter à un réseau déconnecté.


9
2018-06-04 13:06





tmux

Celui-ci est un classique. Utilisez-le chaque fois que vous courez le risque de perdre la connexion à un terminal.

$ tmux
$ sh do_something_that_takes_forever

!! Connection fails so you reconnect once you notice

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0

Juste comme ça, vous êtes de retour dans l'action.


9
2018-04-06 01:24



Merci beaucoup! Je cherchais comment faire cela avec tmux, car cela semble être ce que la plupart des gens considèrent comme la meilleure option. - CoolOppo


Comme d'autres l'ont déjà souligné, l'écran est généralement la meilleure solution et ajoute de nombreuses autres fonctionnalités utiles.

Vous pouvez configurer votre profil sur la machine distante pour qu'il se lance automatiquement et / ou se reconnecte à l'écran lors de la connexion, ce qui vous évite d'oublier de démarrer l'écran une fois que vous en avez besoin, car vous perdez la connexion.

Voir http://tlug.dnho.net/?q=node/239 (ou recherchez sur Google de nombreux autres exemples fait de manière légèrement différente).


3
2018-06-04 13:47



Beau script dans ce lien, merci! - palehorse