sviluppo-web-qa.it

Come posso avviare una sessione dello schermo con un comando su ssh su un server remoto dal mio desktop?

Voglio essere in grado di avviare sessioni dello schermo su server remoti da un singolo comando ssh sul mio desktop. Tuttavia, lo schermo sembra necessitare di un terminale, che non è disponibile quando si esegue un comando tramite ssh.

Quindi l'ovvio

ssh [email protected] screen "tail -f /var/log/messages"

(come esempio) non funziona e dà

Must be connected to a terminal.

Voglio che ssh avvii il comando sotto una schermata in modo da poter accedere in un secondo momento e allegarlo come farei con una sessione di schermata che avrei avviato manualmente.

Prova a usare l'opzione -t per ssh

ssh -t [email protected] screen "tail -f /var/log/messages"

Da man ssh

 - t Forza allocazione pseudo-tty. Questo può essere usato per eseguire arbi - 
 Programmi basati su schermo su una macchina remota, il che può essere 
 Molto utile, ad esempio, quando si implementano servizi di menu. Le opzioni multiple -t 
 Forza l'allocazione tty, anche se ssh non ha tty locale. 
79

Puoi usare:

ssh [email protected] screen -m -d "tail -f /var/log/messages"

Ciò avvia una schermata separata con un comando in esecuzione su di essa.

   -m   causes screen  to  ignore  the  $STY  environment  variable.  With
        "screen  -m"  creation  of  a  new session is enforced, regardless
        whether screen is called from within  another  screen  session  or
        not.  This  flag has a special meaning in connection with the `-d'
        option:

   -d -m   Start screen in "detached" mode. This creates a new session but
           doesn't  attach  to  it.  This  is  useful  for  system startup
           scripts.
33
Alakdae

Risposta in ritardo, ma questo è quello che faccio, faccio un alias (chiamiamolo t) che fa questo:

ssh $MYSERVER -a -x -t screen -xRR -A -e^Zz -U -O

Questo dice a ssh di disabilitare l'agente e l'inoltro X11, e dice a screen di collegarsi a una sessione in esecuzione, avviarne una nuova se necessario, usare ^Z come comando di breakout, usa UTF-8 e sii intelligente con il terminale.

Tutto questo significa che posso aprire un terminale, digitare t e si aprirà la mia sessione di schermo su $ MYSERVER. Posso quindi aprire un altro terminale, fare la stessa cosa e ottenere un'altra finestra per la stessa sessione.

È davvero bello avere più finestre del terminale nella stessa sessione dello schermo in modo da poter vedere contemporaneamente due schede dello schermo.

8
w00t

Inserendo quanto segue nel file ~/.bashrc sul mio server, avvia una sessione di schermo la prima volta che accedo al server o, se ne è già in esecuzione uno, mi riconnette a quella sessione.

Lo trovo molto utile:

if [ -n "$SSH_CONNECTION" ] && [ -z "$SCREEN_EXIST" ]; then
    export SCREEN_EXIST=1
    screen -DRi
fi
4
Brent