avvia automaticamente la schermata al login ssh


19

Ho letto su come avviare automaticamente una schermata quando accedo ssha un server remoto. Vorrei un semplice one-liner da aggiungere al mio .bash_profileper iniziare screenquando sshentro, e NON uscire dalla mia connessione remota quando stacco lo schermo.

Ho cercato in exec screene praticamente ogni combinazione di -d, -r, -De -Rnon riesco a capire cosa mi serve bandiere.

Idealmente vorrei digitare ssh whatevered essere registrato nel server in un nuovo screeno può ricollegare un vecchio schermo, mi piacerebbe in qualche modo sapere come fare entrambi per vedere quale mi piace di più. Quindi posso digitare Ctrl ado Ctrl de farmi riportare al normale sshlogin per quel server (dove vedresti il ​​motd). Da lì posso screen -rtornare in qualsiasi schermata io voglia, o premere di Ctrl dnuovo per disconnettersi.

Risposte:


19

Un semplice screen -Rdovrebbe fare il trucco.

Per verificarlo, ho aggiunto il screen -Rmio .bash_profile su un server remoto , ho effettuato l'accesso, disconnesso dallo schermo e sono stato riportato a un normale prompt della shell sul server remoto. Verificato anche con .bashrc. I successivi accessi hanno prodotto il risultato atteso (ricollegarsi alla sessione dello schermo).


Grazie! Stavo leggendo in giro e avevo l'impressione che avrei bisogno di exec screen -R. Sono contento che abbia funzionato
Ronald Dregan il

È una cattiva idea mettere logouto exitsubito dopo quella riga st una sessione ssh viene immediatamente chiusa una volta che lo schermo è chiuso da Ctrl + D?
Griddo,

Questo non ha funzionato per me. Ho avviato alcune dozzine di schermate poiché la linea viene eseguita ogni volta che inizia una sessione. Come hai fatto in modo che ciò non accadesse?
Thomas,

11

Ho avuto problemi con 40 sessioni di schermate a cascata create con alcune delle soluzioni all'avvio di una nuova finestra o sessione di schermate. Sono stato in grado di eliminare la schermata a cascata e creare una nuova sessione se non ne esistesse una:

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

Verifica se sei in una sessione dello schermo e viene eseguito screen -Rse non lo sei. Senza il test si ottiene il "Collegamento dall'interno dello schermo?" avviso dallo schermo ogni volta che si crea una nuova finestra dello schermo.


+1 - come questo meglio del screen -lstest menzionato da Tony
cwd

10

screen -RR si ricollegherà alla prima sessione disponibile o ne creerà una se necessario.


è stato molto utile perché usare lo schermo -R mi stava causando problemi con più sessioni.
David V.,

Questo è fantastico, grazie! Si collega alla prima sessione "Detached" trovata (se ce ne sono) e ignora le sessioni associate. Quindi ti consente di accedere e avere più finestre aperte, ma assicurati comunque che ogni sessione abbia la protezione di funzionare in una schermata. Le nostre persone OPS grazie!
Ian McGowan,

8

Se capisco le tue necessità, dovresti provare:

if $(screen -ls | grep -q pts); then screen -x; else screen -R; fi

Creerà solo una sessione schermo, altrimenti si riconnetterà a quella esistente in modo multi-windows (anche se hai più sessioni ssh, finirai per la stessa sessione schermo)


Mi piace questa idea per il suo riconoscimento del fatto che abbiamo client SSH multi-finestra (o talvolta vai e accedi direttamente sulla macchina). È abbastanza flessibile se usi qualcosa come Bitvise e hai più finestre del terminale aperte: puoi trasformare le singole finestre dello schermo in finestre fisiche separate.
Piku,

1
Tutto questo può essere sostituito screen -xR, che sembra essere analizzato come "allega se c'è qualcosa a cui attaccare, altrimenti crea un nuovo schermo".
Piskvor lasciò l'edificio il

0

Qui una piccola estensione,

lo script per il bashrc controlla se c'è più di una sessione di schermo staccata. Se ce n'è di più, allora devi scegliere la sessione manualmente. Quando c'è una sessione distaccata, torni a questa sessione. Se si esce dalla sessione, anche la sessione ssh si chiuderà.

 #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

Se si desidera connettersi automaticamente a una sessione dello schermo quando ci si connette tramite SSH, aggiungere il codice seguente al proprio .bash_profileo .bashrcsul proprio computer remoto, esso:

  • Avvia una nuova sessione dello schermo ogni volta che ti connetti tramite SSH.
  • Riutilizzare la sessione di schermo indipendente già esistente , iniziando sempre con l'ultima. Se non sono disponibili sessioni distaccate, ne avvia una nuova.
  • Quando apri più connessioni SSH al tuo computer, otterrai una sessione di schermata diversa poiché riutilizziamo solo quelle staccate.
  • Evita i loop nel caso in cui stai aggiungendo lo script al tuo .bashrc

Ecco la sceneggiatura:

#!/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: se si desidera abilitare questa opzione per il terminale locale, rimuoverla && ! -z "${SSH_CLIENT}sulla prima riga.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.