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