Simplificando: não - a menos que você tome medidas especiais, qualquer comando de longa duração no servidor terminará quando o shell que o ssh
iniciou remotamente sair. Esse shell será encerrado se você terminar sua sessão ssh
, ou mesmo se a conexão TCP for interrompida (perder conectividade de rede, alternar redes Wi-Fi, hibernar, etc).
No entanto, existem várias opções para realizar essas "medidas especiais". Do mais simples ao mais complexo / envolvido:
-
nohup - basta prefixar seu comando de uma linha com
nohup
. Isso funciona se você puder assumir que o comando será executado e, em seguida, encerrará a si mesmo. A saída será enviada para o arquivonohup.out
em seu diretório atual. Exemplo:nohup sh -c "sleep 5; echo done" &
-
tela -
screen
configurará uma janela de terminal virtual que não será encerrada quando sua conexãossh
terminar. Você pode se reconectar ao servidor mais tarde e ver o status de todos os comandos que estava executando e emitir novos comandos. Exemplo:% client: ssh server # server: screen # server[0]: mysql -e 'really long query' <disconnect>
Mais tarde, voltar e:
% client: ssh server # server: screen -RD # -RD says "reconnect to my previous screen, even it already attached" # server[0]: <right where you left off in the previous screen>
Existem muitas opções para
screen
, você pode criar vários "terminais" dentro de uma sessãoscreen
, e você pode configurá-lo extensivamente no arquivo~/.screenrc
. -
mosh - um substituto para
ssh
, que manterá a sessão independentemente da rede conectividade. À medida que você migra entre redes Wi-Fi ou até mesmo hiberna / desperta sua máquina,mosh
se reconectará ao servidor. Além disso, ele fornecerá uma interface livre de atrasos para trabalhar, de modo que, à medida que você digita seus comandos, você não será afetado pela lentidão do link ou do servidor. Observe que o mosh usassh
para estabelecer a conexão inicial e configurar o servidor UDP no terminal remoto.