Como posso iniciar uma sessão de tela com um comando sobre o ssh em um servidor remoto da minha área de trabalho?

55

Eu quero poder iniciar sessões de tela em servidores remotos a partir de um único comando ssh em minha área de trabalho. No entanto, a tela parece precisar de um terminal, que não está disponível ao executar um comando por meio do ssh.

Então o óbvio

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

(como exemplo) não funciona e fornece

Must be connected to a terminal.

Eu quero que o ssh lance o comando em uma tela para que eu possa fazer login mais tarde e anexar como faria em uma sessão de tela que eu teria lançado manualmente.

    
por Thomas Vander Stichele 08.06.2009 / 10:57

4 respostas

74

Tente usar a opção -t para ssh

ssh -t [email protected] 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.
    
por 08.06.2009 / 11:04
32

Você pode usar:

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

Isso inicia uma tela desanexada com um comando em execução.

   -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.
    
por 08.06.2009 / 14:08
8

Resposta tardia, mas é isso que eu faço, eu faço um apelido (vamos chamá-lo de t) que faz isso:

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

Isso diz ao ssh para desabilitar o agente e o encaminhamento do X11 e informa ao screen para anexar a uma sessão em execução, iniciar um novo, se necessário, usar ^Z como o comando breakout, usar UTF-8 e ser inteligente sobre o terminal.

Tudo isso significa que posso abrir um terminal, digite t e ele abrirá minha sessão de tela em $ MYSERVER. Eu posso então abrir outro terminal, fazer a mesma coisa e obter outra janela para a mesma sessão.

É muito bom ter várias janelas de terminal na mesma sessão de tela para que você possa ver duas guias de tela ao mesmo tempo.

    
por 12.09.2011 / 20:48
4

Colocando o seguinte no arquivo ~ / .bashrc no meu servidor, ele inicia uma sessão de tela na primeira vez que eu fizer logon no servidor ou, se já estiver em execução, me reconectar a essa sessão.

Acho isso muito útil:

if [ -n "$SSH_CONNECTION" ] && [ -z "$SCREEN_EXIST" ]; then
    export SCREEN_EXIST=1
    screen -DRi
fi
    
por 08.06.2009 / 14:21