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
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 descreen -d -R
. - Use prefix d ou
tmux detach-client
outmux 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á.
screen