alias para desanexar a tela quando eu sair (e matar o ssh)

4

Eu inicio automaticamente a tela do gnu quando eu ssh em um em meus próprios servidores. Quando terminar, devo separar. Então saia para sair do ssh. Isso significa que quando eu voltar ao servidor novamente em algum momento, posso continuar de onde parei.

Posso criar um alias (por exemplo) que (a partir da tela) desconecte e solte ssh?

    
por Vissie 01.07.2018 / 12:54

2 respostas

2

Iniciando screen ao efetuar login no host remoto (executado em sua máquina local):

ssh -t user@host screen

Na sessão de tela, no host remoto, para desconectar e efetuar logout (o que encerraria a sessão SSH, a menos que você esteja usando uma conexão persistente usando um soquete de controle (isto é, usando a configuração ControlMaster com ControlPersist in ~/.ssh/config )):

screen -d

Mais tarde, para fazer login e anexar novamente:

ssh -t user@host screen -r

Note que você tem que usar -t com ssh , forçando a alocação de pseudo-terminais, para iniciar screen desta maneira.

O alias no host remoto seria para screen -d , talvez detach='screen -d' ou algo semelhante.

No host local, você pode ter uma seção no arquivo ~/.ssh/config dizendo

Host *-screen
    RequestTTY force
    RemoteCommand screen -d -R

Host myhost myhost-screen
    HostName myhost.somedomain.example.com
    User myname

Então, sempre que você usar

ssh myhost-screen

uma sessão screen seria criada (ou reconectada a) no host especificado, enquanto

ssh myhost

não usaria screen .

Nota: RemoteCommand foi adicionado no OpenSSH 7.6 (2017-10-03).

Para tmux :

  • Use tmux new-session -A -s "%n" em ~/.ssh/config em vez de screen -d -R .
  • Use o prefixo d ou tmux detach-client ou tmux detach para desanexar.
por 01.07.2018 / 22:02
1

Quando você executa o comando de tela para recuperar ou criar sua tela, Depois de você adicionar um kill do seu shell pai, então você irá matar sua conexão ssh.

um exemplo para matar meu processo pai se o pai for bash

kill $( ps -ax -o pid,ppid,args | grep "^$$ " |  grep bash | awk '{print $2} ' )
    
por 01.07.2018 / 19:26