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

Posso criar um alias (por exemplo) que irá (de dentro da tela) desanexar e remover o ssh?

Comentários

  • Como você inicia screen

Resposta

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

ssh -t user@host screen 

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

screen -d 

Mais tarde, para fazer login e anexe novamente:

ssh -t user@host screen -r 

Observe que você deve usar -t com ssh, forçando a alocação do pseudoterminal, para iniciar screen desta forma.

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

No host local, você poderia ter uma seção em seu ~/.ssh/config arquivo 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 screen sessão seria criada (ou reconectada) no host especificado, enquanto

ssh myhost 

não usaria screen.

Observação: 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 prefix d ou tmux detach-client ou tmux detach para desanexar.

Comentários

  • Legal, obrigado. Em casa, isso vai funcionar muito bem. Eu não sabia sobre ' Forçar alocação pseudo-tty '. Eu testei isso e funciona.

Resposta

Quando você executa o comando de tela para recuperar ou criar sua tela , Após você adiciona um kill de seu shell pai, então você irá interromper 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} " ) 

Comentários

  • Thx. Se eu ssh de algum lugar onde não posso especificar um aplicativo para executar (como ssh online app.shellngn.com ), e modifico sua linha de código para procure por sessões ssh, isso funcionará.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *