web-dev-qa-db-fra.com

Comment puis-je lancer une session d'écran avec une commande sur ssh sur un serveur distant depuis mon bureau?

Je veux pouvoir lancer des sessions d'écran sur des serveurs distants à partir d'une seule commande ssh sur mon bureau. Cependant, screen semble avoir besoin d'un terminal, qui n'est pas disponible lors de l'exécution d'une commande via ssh.

Donc, l'évidence

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

(à titre d'exemple) ne fonctionne pas et donne

Must be connected to a terminal.

Je veux que ssh lance la commande sous un écran afin que je puisse me connecter plus tard et attacher comme je le ferais à une session d'écran que j'aurais lancée manuellement.

58

Essayez d'utiliser l'option -t pour ssh

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

De l'homme ssh

 - t Forcer l'allocation de pseudo-tty. Cela peut être utilisé pour exécuter des programmes basés sur l'écran arbi - 
 Trary sur une machine distante, ce qui peut être 
 Très utile, par exemple, lors de la mise en œuvre de services de menu. Plusieurs options -t 
 Forcent l'allocation de tty, même si ssh n'a pas de tty local. 
79

Vous pouvez utiliser:

ssh root@Host screen -m -d "tail -f /var/log/messages"

Cela démarre un écran détaché avec une commande exécutée dessus.

   -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

Réponse tardive, mais c'est ce que je fais, je fais un alias (appelons-le t) qui fait ceci:

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

Cela indique à ssh de désactiver l'agent et le transfert X11, et indique à screen de se joindre à une session en cours, d'en démarrer une nouvelle si nécessaire, d'utiliser ^Z comme commande de dérivation, utilisez UTF-8 et soyez intelligent sur le terminal.

Tout cela signifie que je peux ouvrir un terminal, tapez t et cela ouvrira ma session écran sur $ MYSERVER. Je peux ensuite ouvrir un autre terminal, faire la même chose et j'obtiens une autre fenêtre pour la même session.

C'est vraiment bien d'avoir plusieurs fenêtres de terminal pour la même session d'écran, vous pouvez donc regarder deux onglets d'écrans en même temps.

8
w00t

En mettant ce qui suit dans le fichier ~/.bashrc sur mon serveur, il démarre une session d'écran la première fois que je me connecte au serveur, ou si une est déjà en cours d'exécution, me reconnecte à cette session.

Je trouve cela très pratique:

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