67 votes

Comment puis-je lancer une session d'écran avec une commande via ssh sur un serveur distant à partir de 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 root@my.machine 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 pour que je puisse me connecter plus tard et attacher comme je le ferais à une session d'écran que j'aurais lancée manuellement.

90voto

dF. Points 29787

Essayez d'utiliser l'option -t pour ssh

ssh -t root@my.machine screen "tail -f /var/log/messages"

De man ssh

\-t      Force pseudo-tty allocation.  This can be used to execute arbi-
        trary screen-based programs on a remote machine, which can be
        very useful, e.g., when implementing menu services.  Multiple -t
        options force tty allocation, even if ssh has no local tty.

39voto

Michael Barker Points 8234

Vous pouvez utiliser :

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

Cela démarre un écran détaché avec une commande en cours d'exécution.

   -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.

8voto

xLRDxREVENGEx Points 101

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

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

Cela signifie que ssh pour désactiver le transfert d'agent et de X11, et indique à screen pour attacher à une session en cours, en commencer une nouvelle si nécessaire, utilisez ^Z comme commande de rupture, utilisez UTF-8 et soyez malin avec le terminal.

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

Il est très agréable de disposer de plusieurs fenêtres de terminal pour la même session d'écran, ce qui permet de consulter deux onglets d'écran en même temps.

4voto

Kristof Provost Points 12359

En plaçant ce qui suit dans le fichier ~/.bashrc de mon serveur, une session écran est lancée la première fois que je me connecte au serveur, ou si une session est déjà en cours, elle 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X