web-dev-qa-db-fra.com

Démarrer automatiquement l'écran sur SSH Connexion

J'ai lu sur la manière de démarrer automatiquement un écran lorsque je ssh sur un serveur distant. Je voudrais un simple doublure à ajouter à mon .bash_profile Pour démarrer screen lorsque je ssh In, et ne quittez pas ma connexion à distance lorsque je détache l'écran.

J'ai regardé dans exec screen et à peu près toutes les combinaisons de -d, -r, -D et -R et ne peut pas comprendre quels drapeaux dont j'ai besoin.

Idéalement je voudrais taper ssh whatever et être connecté au serveur dans un nouveau screen _ ou peut-il faire de l'écran ancien, je voudrais un peu de savoir comment faire les deux pour voir ce que j'aime mieux. Alors je peux soit taper Ctrlad ou alors Ctrld Et demandez-moi de me ramener à la normale ssh Connectez-vous pour ce serveur (où vous verriez le motd). De là je peux screen -r retour dans l'écran que je veux ou frapper Ctrld à nouveau pour se déconnecter.

22
Ronald Dregan

J'ai eu des problèmes avec 40 sessions d'écran en cascade étant créées avec certaines des solutions lors du démarrage d'une nouvelle fenêtre ou d'une nouvelle séance d'écran. J'ai pu éliminer l'écran en cascade et créer une nouvelle session si l'on n'existait pas avec ceci:

if [ -z "$STY" ]; then screen -R; fi

Il teste si vous êtes dans une session d'écran et qu'il exécute screen -R Si vous n'êtes pas. Sans le test, vous obtenez le "attacher de l'intérieur de l'écran?" Avertissement de l'écran Chaque fois que vous créez une nouvelle fenêtre d'écran.

13
seq3

screen -RR Rattachez-vous à la première session disponible ou de créer un si nécessaire.

11
user1187902

Ici une petite extension,

le script pour la vérification BISHRC s'il existe plus d'une session d'écran détachée. S'il y a plus, vous devez choisir le manuel de la session. Quand il y a une session détachée, vous revenez à cette session. Si vous quittez la session, la session SSH se fermera également.

 #Start Screen
 if [ -z "$STY" ]; then

 value=$( screen -ls |grep '\<pts.*Detached\>' |wc -l )

 if [ $value -gt 1 ]; then

  screen -ls

 else

  screen -R

  echo 5 Sek. bis die SSH Session beendet wird.

  echo Strg + C - um ohne screen weiter zu arbeiten.

  sleep 6

  exit

 fi

fi
0
Thomas

Si vous souhaitez vous connecter automatiquement à une session d'écran lorsque vous vous connectez via SSH, ajoutez le code ci-dessous à votre .bash_profile ou votre .bashrc sur votre machine distante, elle:

  • Démarrez une nouvelle session d'écran chaque fois que vous vous connectez via SSH.
  • Réutiliser déjà existant détaché Séance d'écran, en commençant toujours par le dernier. Si aucune sessions détachée n'est disponible, elle commence une nouvelle.
  • Lorsque vous ouvrez plusieurs connexions SSH à votre machine, vous obtiendrez une session d'écran différente puisque nous ne réutiliserons que des personnes détachées.
  • Évitez les boucles au cas où vous ajoutez le script à votre .bashrc

Voici le script:

#!/bin/bash
#
#  Attaches to the first Detached Screen. Otherwise starts a new Screen.

# Only run if we are not already inside a running screen and only if in an SSH session.
if [[ -z "${STY}" && ! -z "${SSH_CLIENT}" ]]; then
  detached_screens=($(screen -ls | grep pts | grep -v Attached))

  for screen in "${detached_screens[@]}"; do
    if [[ "${screen}" == *".pts"* ]]; then
      IFS='.pts' read -ra split <<< "${screen}"
      for id in "${split[@]}"; do
        first_id="${id}"
        break
      done 
      break
    fi
  done

  screen -R $first_id
fi

PS: Si vous souhaitez activer ceci pour le terminal local, supprimer && ! -z "${SSH_CLIENT} sur la première ligne.

0
Nicolas Garnier