Comment utiliser la commande d'écran pour éviter la terminaison de session SSH inattendue

Comment utiliser la commande d'écran pour éviter la terminaison de session SSH inattendue

Problème de déconnexion SSH

Votre session de terminal peut être fermée en raison de divers problèmes de réseau pendant que vous êtes
exécuter un processus sur une machine distante, par exemple.:

# Écriture Échec: tuyau cassé 

À la suite de ce réseau de déconnexion, votre session SSH Shell tuera également par inadvertance tous les processus d'enfants exécutés sous votre ssh Session sur la machine distante.

Exécution d'une solution de session SSH ininterrompue

Utilisez le filtrer commande pour enregistrer la session. Pendant que votre session SSH se déconnecte, la commande d'écran maintient votre processus distant en cours d'exécution. Considérez un exemple SSH suivant où nous essayons de SSH à partir d'un hôte local dix.1.1.2 enlever dix.1.1.15 héberger.

Commande d'écran Exemple SSH

Commençons par inscrire nos séances d'écran actuellement ouvertes:

Écran local> $ -List - Aucune socket trouvée dans / var / run / écran / s-lubos. 

De ce qui précède filtrer Sortie de commande Nous pouvons voir qu'actuellement, nous n'avons aucune session ouverte. Créons un nouveau filtrer Session pendant que nous en même temps ssh à un hôte distant. Ouvrez le nouveau terminal et entrez:

local> $ écran ssh root @ 10.1.1.15 

Énumérez à nouveau nos séances d'écran:

Écran local> $ -List il y a un écran sur: 5646.pts-0.thebeast (13/05/15 16:49:30) (ci-joint) 1 prise dans / var / run / écran / s-lubos. 

Ce qui précède filtrer La sortie montre que nous avons une session attachée avec PID ID 5646. Pour le moment, nous pouvons démarrer un processus sur un hôte distant comme pour un exemple, nous pouvons effectuer un ping simple:

Remote> # ping 8.8.4.4 ping 8.8.4.4 (8.8.4.4) 56 (84) octets de données. 64 octets de 8.8.4.4: ICMP_REQ = 1 TTL = 57 Time = 18.2 ms 64 octets de 8.8.4.4: ICMP_REQ = 2 TTL = 57 Time = 17.2 ms 64 octets de 8.8.4.4: ICMP_REQ = 3 TTL = 57 Time = 18.0 ms 

À ce stade, nous pouvons simuler une déconnexion du réseau à un hôte distant en débranchant manuellement le câble réseau:

local> $ ping 10.1.1.15 ping 10.1.1.15 (10.1.1.15) 56 (84) octets de données. À partir de 10.1.1.2 icmp_seq = 9 hôte de destination inaccessible à partir de 10.1.1.2 icmp_seq = 10 hôte de destination inaccessible à partir de 10.1.1.2 ICMP_SEQ = 11 Hôte de destination inaccessible ^ C --- 10.1.1.15 Ping Statistics --- 13 paquets transmis, 0 reçus, +3 erreurs, 100% de perte de paquets, heure 12088 ms tuyau 3 

À ce stade, nous avons perdu la connexion et notre ssh La session se figera. Nous pouvons maintenant fermer la fenêtre du terminal avec déconnecté ssh Session et énumérez nos écrans:

Écran local> $ -List il y a un écran sur: 5646.pts-0.thebeast (13/05/15 16:49:30) (détaché) 1 prise dans / var / run / écran / s-lubos. 

Comme nous pouvons le voir, notre session d'écran est maintenant détachée. Ensuite, nous recréons une connexion réseau à un hôte distant:

local> $ ping 10.1.1.15 ping 10.1.1.15 (10.1.1.15) 56 (84) octets de données. 64 octets de 10.1.1.15: icmp_seq = 1 ttl = 64 Time = 0.951 ms 64 octets de 10.1.1.15: ICMP_SEQ = 2 TTL = 64 Time = 0.563 ms ^ c --- 10.1.1.15 Ping Statistics --- 2 paquets transmis, 2 reçus, 0% de perte de paquets, heure 1001 ms RTT min / avg / max / mDev = 0.563/0.757/0.951/0.194 MS 

À ce stade, nous pouvons à nouveau réprimer notre session SSH distante précédemment ouverte:

local> $ écran -d -r 64 octets de 8.8.4.4: ICMP_REQ = 203 TTL = 57 Time = 18.2 ms 64 octets de 8.8.4.4: ICMP_REQ = 204 TTL = 57 Time = 18.1 ms 64 octets de 8.8.4.4: ICMP_REQ = 205 TTL = 57 Time = 18.1 ms 64 octets de 8.8.4.4: ICMP_REQ = 206 TTL = 57 Time = 18.4 ms 64 octets de 8.8.4.4: ICMP_REQ = 207 TTL = 57 Time = 18.1 ms ^ c --- 8.8.4.4 Ping Statistics --- 207 paquets transmis, 207 Reçu, 0% de perte de paquets, heure 206310ms RTT Min / AVG / MAX / MDEV = 17.231/18.369/23.795/0.571 ms 

La sortie ci-dessus avec une perte de paquets de 0% est une preuve que même nous sommes déconnectés d'une session distante par une défaillance du réseau filtrer La commande a tenu le processus distant en vie sans interruption.

Tutoriels Linux connexes:

  • Comment propager un signal aux processus d'enfants à partir d'un bash…
  • Comment tuer le processus par son nom
  • Gestion de la liste des processus et terminaison automatique des processus
  • Comment tuer le processus basé sur le numéro de port dans Linux
  • Introduction aux tuyaux nommés sur Bash Shell
  • Comment utiliser la commande killall sur Linux
  • Guide de dépannage général GNU / Linux pour les débutants
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Comment lancer des processus externes avec Python et le…
  • Commandes Linux de base