![Como obter o tema Aero Glass no Windows 10](/f/5f2c697d34143e877dcfbdb2a891ecc3.jpg?width=100&height=100)
SSH ou Capsula segura em termos simples, é uma maneira pela qual uma pessoa pode acessar remotamente outro usuário em outro sistema, mas apenas na linha de comando, ou seja, modo não-GUI. Em termos mais técnicos, quando transferimos para outro usuário em algum outro sistema e executamos comandos nesse máquina, ele na verdade cria um pseudoterminal e o anexa ao shell de login do usuário logado em.
Quando saímos da sessão ou a sessão atinge o tempo limite depois de ficar ocioso por algum tempo, o SIGHUP sinal é enviado para o pseudo-terminal e todos os trabalhos que foram executados nesse terminal, mesmo os trabalhos que foram seus trabalhos pais sendo iniciados no pseudoterminal também recebem o sinal SIGHUP e são forçados a encerrar.
Não perca:5 práticas úteis para manter o servidor SSH seguro e protegido
Apenas as tarefas que foram configuradas para ignorar esse sinal são aquelas que sobrevivem ao término da sessão. Em sistemas Linux, podemos ter várias maneiras de fazer esses trabalhos rodarem no servidor remoto ou em qualquer máquina, mesmo após o logout do usuário e o encerramento da sessão.
Processos normais são aqueles que têm duração de uma sessão. Eles são iniciados durante a sessão como processos em primeiro plano e terminam em um determinado intervalo de tempo ou quando a sessão é desconectada. Esses processos têm como proprietário qualquer um dos usuários válidos do sistema, incluindo o root.
Processos órfãos são aqueles que inicialmente tinham um pai que criou o processo, mas depois de algum tempo, o processo pai morreu ou travou acidentalmente, fazendo com que init fosse o pai desse processo. Esses processos têm init como seu pai imediato, que espera por esses processos até que morram ou acabem.
Esses são alguns processos intencionalmente órfãos, tais processos que são intencionalmente deixados em execução no sistema são denominados como daemon ou processos intencionalmente órfãos. Eles geralmente são processos de longa duração que são iniciados e, em seguida, separados de qualquer controle terminal para que possam ser executados em segundo plano até que não sejam concluídos ou acabem gerando um erro. O pai de tais processos morre intencionalmente, fazendo com que a criança execute em segundo plano.
Pode haver várias maneiras de deixar as sessões ssh em execução após a desconexão, conforme descrito abaixo:
tela é um gerenciador de janelas de texto para Linux que permite ao usuário gerenciar várias sessões de terminal ao mesmo tempo, alternando entre sessões, registro de sessão para o executar sessões na tela e até mesmo retomar a sessão a qualquer momento que desejarmos, sem nos preocupar com o logout da sessão ou o encerramento do terminal.
As sessões de tela podem ser iniciadas e então desconectadas do terminal de controle, deixando-as em execução em segundo plano e, em seguida, reiniciadas a qualquer momento e até mesmo em qualquer lugar. Basta iniciar a sessão na tela e, quando quiser, desconectar do pseudoterminal (ou do terminal de controle) e fazer logout. Quando quiser, você pode fazer o login novamente e retomar a sessão.
Depois de digitar 'tela', você estará em uma nova sessão de tela, dentro desta sessão você pode criar novas janelas, percorrer entre janelas, bloquear a tela e fazer muito mais coisas que você pode fazer em um terminal normal.
$ screen.
Depois que a sessão de tela for iniciada, você pode executar qualquer comando e manter a sessão em execução desanexando-a.
Apenas quando você deseja sair da sessão remota, mas deseja manter a sessão que você criou naquela máquina vivo, então o que você precisa fazer é separar a tela do terminal para que não tenha um terminal de controle deixou. Depois de fazer isso, você pode fazer logout com segurança.
Para desanexar uma tela do terminal remoto, basta pressionar “Ctrl + a”
imediatamente seguido por “D”
e você estará de volta ao terminal vendo a mensagem de que a Tela foi separada. Agora você pode fazer logout com segurança e sua sessão permanecerá ativa.
Se você quiser retomar uma sessão de tela separada da qual você saiu antes de sair, basta fazer login novamente no terminal remoto e digitar “Screen -r”
no caso de apenas uma tela ser aberta, e se várias sessões de tela forem abertas, execute “Screen -r
.
$ screen -r. $ screen -r
Para saber mais sobre o comando screen e como usá-lo, basta seguir o link: Use o comando de tela para gerenciar sessões de terminal Linux
Tmux é outro software criado para substituir tela. Ele tem a maioria dos recursos de tela, com poucos recursos adicionais que o tornam mais poderoso do que a tela.
Ele permite, além de todas as opções oferecidas pela tela, dividir os painéis horizontal ou verticalmente entre várias janelas, redimensionamento de painéis de janela, monitoramento de atividade de sessão, script usando o modo de linha de comando etc. Devido a esses recursos do tmux, ele tem sido amplamente adotado por quase todas as distribuições Unix e até mesmo foi incluído no sistema básico do OpenBSD.
Depois de fazer ssh no host remoto e digitar tmux, você entrará em uma nova sessão com uma nova janela aberta à sua frente, na qual você pode fazer qualquer coisa que fizer em um terminal normal.
$ tmux.
Depois de realizar suas operações no terminal, você pode desconectar essa sessão do terminal de controle para que ela entre em segundo plano e você possa fazer o logout com segurança.
Ou você pode correr “Tmux detach”
sobre a execução da sessão tmux ou você pode usar o atalho (Ctrl + be d)
. Depois disso, sua sessão atual será desconectada e você voltará ao seu terminal de onde poderá fazer logout com segurança.
$ tmux detach.
Para reabrir a sessão que você desconectou e deixou como estava quando saiu do sistema, apenas faça login novamente na máquina remota e digite “Tmux attach” para reconectar à sessão fechada e ela ainda estará lá e funcionando.
$ tmux attach.
Para saber mais sobre o tmux e como usá-lo basta seguir o link: Use Tmux Terminal Multiplexer para gerenciar vários terminais Linux.
Se você não está familiarizado com tela ou tmux, você pode usar nohup e enviar seu comando de longa execução para segundo plano para que você possa continuar enquanto o comando continuará sendo executado em segundo plano. Depois disso, você pode fazer logout com segurança.
Com o comando nohup, dizemos ao processo para ignorar o SIGHUP sinal que é enviado pela sessão ssh no término, fazendo com que o comando persista mesmo após o logout da sessão. No logout da sessão, o comando é desconectado do terminal de controle e continua sendo executado em segundo plano como um processo daemon.
Aqui está um cenário simples em que executamos encontre o comando para procurar por arquivos em segundo plano na sessão ssh usando nohup, após o qual a tarefa foi enviada para segundo plano com o prompt retornando imediatamente, dando PID e trabalho EU IA do processo ([JOBID] PID)
.
# nohup find / -type f $ gt; files_in_system.out 2> 1 &
Ao fazer o login novamente, você pode verificar o status do comando e trazê-lo de volta ao primeiro plano usando 'fg% JOBID'
para monitorar seu progresso e assim por diante. Abaixo, a saída mostra que o trabalho foi concluído, pois não aparece no novo login e forneceu a saída que é exibida.
# fg% JOBID.
Outra maneira elegante de permitir que seu comando ou uma única tarefa seja executada em segundo plano e permaneça ativa mesmo após o logout da sessão ou a desconexão é usando repudiar.
Repudiar, remove o trabalho da lista de trabalhos de processo do sistema, para que o processo seja protegido de ser encerrado durante a desconexão da sessão, pois não receberá SIGHUP pelo shell quando você sai.
A desvantagem deste método é que ele deve ser usado apenas para os trabalhos que não precisam de nenhuma entrada do Stdin e nem precisa escrever para stdout, a menos que você redirecione especificamente a entrada e saída de tarefas, porque quando a tarefa tentará interagir com Stdin ou stdout, ele vai parar.
Abaixo, enviamos ping comando para segundo plano para que ut continue em execução e seja removido da lista de trabalhos. Como visto, o trabalho foi suspenso pela primeira vez, após o que ainda estava na lista de trabalhos como ID do processo: 15368.
$ ping tecmint.com> pingout & $ jobs -l. $ disown -h% 1. $ ps -ef | grep ping.
Depois que esse sinal rejeitado foi passado para o trabalho, ele foi removido da lista de trabalhos, embora ainda estivesse em execução em segundo plano. O trabalho ainda estaria em execução quando você faria o login novamente no servidor remoto, conforme mostrado abaixo.
$ ps -ef | grep ping.
Outro utilitário para atingir o comportamento necessário é setsid. Nohup tem uma desvantagem no sentido de que o grupo de processos do processo permanece o mesmo, de modo que o processo em execução com nohup é vulnerável a qualquer sinal enviado para todo o grupo de processos (como Ctrl + C
).
setsid por outro lado, aloca um novo grupo de processos para o processo que está sendo executado e, portanto, o processo criado é totalmente em um grupo de processo recém-alocado e pode executar com segurança sem medo de ser morto, mesmo após a sessão sair.
Aqui, isso mostra que o processo ‘Durma 10m’
foi desanexado do terminal de controle, desde o momento em que foi criado.
$ setsid sleep 10m. $ ps -ef | grep sleep.
Agora, quando você fizer login novamente na sessão, ainda encontrará este processo em execução.
$ ps -ef | grep [s] leep.
De que maneiras você poderia pensar para manter o processo em execução mesmo após o logout da sessão SSH? Se houver alguma outra maneira eficiente em que você possa pensar, mencione-a em seus comentários.