Como usar o comando de tela para evitar rescisão inesperada da sessão SSH

Como usar o comando de tela para evitar rescisão inesperada da sessão SSH

Problema de desconexão SSH

Sua sessão de terminal pode ser fechada devido a vários problemas de rede enquanto você estiver
executando um processo em uma máquina remota, por exemplo.:

# Write falhou: tubo quebrado 

Como resultado dessa rede, a desconexão, sua sessão de shell ssh também matará inadvertidamente qualquer processo infantil executado sob o seu ssh sessão na máquina remota.

Executando uma solução ininterrupta de sessão SSH

Use o tela comando para salvar a sessão. Enquanto sua sessão SSH é desconectada, o comando da tela manterá seu processo remoto em execução. Considere um exemplo ssh a seguir, onde tentamos SSH de um host local 10.1.1.2 para remoto 10.1.1.15 hospedar.

Exemplo de comando de tela ssh

Vamos começar listando nossas sessões de tela abertas atualmente:

Local> $ Screen -List No Sockets encontrado em/var/run/screen/s -lubos. 

De cima tela Saída de comando, podemos ver que atualmente não temos sessões abertas. Vamos criar um novo tela sessão enquanto nós ao mesmo tempo ssh para um host remoto. Abra um novo terminal e digite:

Local> $ SLIEL SSH [email protected] 

Liste nossas sessões de tela novamente:

Local> $ Screen -List Há uma tela em: 5646.PTS-0.TheBeast (13/05/15 16:49:30) (anexado) 1 soquete in/var/run/screen/s-lubos. 

O de cima tela A saída mostra que temos uma sessão anexada com PID ID 5646. Neste momento, podemos iniciar um processo em um host remoto, como em um exemplo, podemos executar um ping simples:

remoto> # ping 8.8.4.4 ping 8.8.4.4 (8.8.4.4) 56 (84) bytes de dados. 64 bytes de 8.8.4.4: icmp_req = 1 ttl = 57 tempo = 18.2 ms 64 bytes de 8.8.4.4: icmp_req = 2 ttl = 57 tempo = 17.2 ms 64 bytes de 8.8.4.4: icmp_req = 3 ttl = 57 tempo = 18.0 ms 

Nesta fase, podemos simular uma desconexão de rede para um host remoto desconectando manualmente o cabo de rede:

Local> $ ping 10.1.1.15 ping 10.1.1.15 (10.1.1.15) 56 (84) bytes de dados. De 10.1.1.2 icmp_seq = 9 Host de destino inacessível de 10.1.1.2 ICMP_SEQ = 10 Host de destino inacessível de 10.1.1.2 icmp_seq = 11 Host de destino inacessível ^c --- 10.1.1.15 estatísticas de ping --- 13 pacotes transmitidos, 0 recebido, +3 erros, 100% de perda de pacotes, tempo 12088ms tubo 3 

Neste ponto, perdemos a conexão e nosso ssh sessão vai congelar. Agora podemos fechar a janela do terminal com desconectado ssh sessão e liste nossas telas:

Local> $ Screen -List Há uma tela em: 5646.PTS-0.TheBeast (13/05/15 16:49:30) (destacado) 1 soquete in/var/run/screen/s-lubos. 

Como podemos ver nossa sessão de tela agora está desapegada. Em seguida, recriamos uma conexão de rede com um host remoto:

Local> $ ping 10.1.1.15 ping 10.1.1.15 (10.1.1.15) 56 (84) bytes de dados. 64 bytes de 10.1.1.15: icmp_seq = 1 ttl = 64 tempo = 0.951 ms 64 bytes de 10.1.1.15: icmp_seq = 2 ttl = 64 tempo = 0.563 ms ^c --- 10.1.1.15 estatísticas de ping --- 2 pacotes transmitidos, 2 recebidos, 0% de perda de pacotes, tempo 1001ms rtt min/avg/max/mdev = 0.563/0.757/0.951/0.194 MS 

Neste ponto, podemos mais uma vez se retirar para a nossa sessão SSH remota anteriormente aberta:

Local> $ SLIEC -D -R 64 BYtes de 8.8.4.4: icmp_req = 203 ttl = 57 tempo = 18.2 ms 64 bytes de 8.8.4.4: icmp_req = 204 ttl = 57 tempo = 18.1 ms 64 bytes de 8.8.4.4: icmp_req = 205 ttl = 57 tempo = 18.1 ms 64 bytes de 8.8.4.4: icmp_req = 206 ttl = 57 tempo = 18.4 ms 64 bytes de 8.8.4.4: icmp_req = 207 ttl = 57 tempo = 18.1 ms ^c --- 8.8.4.4 estatísticas de ping --- 207 pacotes transmitidos, 207 recebidos, 0% de perda de pacotes, tempo 206310ms rtt min/avg/max/mdev = 17.231/18.369/23.795/0.571 ms 

A saída acima com 0% de perda de pacotes é uma prova de que mesmo temos desconectado de uma sessão remota por uma falha de rede tela Comando manteve um processo remoto vivo sem interrupção.

Tutoriais do Linux relacionados:

  • Como propagar um sinal para os processos filhos de uma festa…
  • Como matar o processo pelo nome
  • Gerenciamento de lista de processos e terminação automática de processo
  • Como matar o processo com base no número da porta no Linux
  • Introdução aos tubos nomeados na casca de bash
  • Como usar o comando killall no linux
  • Guia de solução de problemas gerais GNU/Linux para iniciantes
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Como lançar processos externos com Python e…
  • Comandos básicos do Linux