O que significa a mensagem Broken pipe em uma sessão SSH?

96

Às vezes, minha sessão SSH é desconectada com uma mensagem Write failed: Broken pipe . O que isso significa? E como posso manter minha sessão aberta?

Eu sei sobre screen , mas essa não é a resposta que estou procurando. Acho que esta é uma opção sshd config.

    
por Peter Stuifzand 14.09.2010 / 11:04

6 respostas

86

É possível que seu servidor feche conexões que estão ociosas por muito tempo. Você pode atualizar seu cliente ( ServerAliveInterval ) ou seu servidor ( ClientAliveInterval )

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.

 ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the client, sshd(8) will send a message
         through the encrypted channel to request a response from the
         client.  The default is 0, indicating that these messages will
         not be sent to the client.  This option applies to protocol
         version 2 only.

Para atualizar seu servidor (e reiniciar seu sshd )

echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config

Ou no lado do cliente:

echo "ServerAliveInterval 60" >> ~/.ssh/config 
    
por 14.09.2010 / 11:56
6

Uma solução alternativa seria usar mosh - o shell móvel . Em contraste com o ssh, ele se conecta via UDP e suporta roaming. Você pode iniciar sua sessão em casa, suspender seu laptop, levá-lo para o trabalho / amigos / em qualquer outro lugar que tenha internet, suspender seu laptop e continuar a trabalhar como se nada tivesse acontecido. É especialmente útil se você estiver com uma péssima conexão com a Internet: ele mostrará um feedback instantâneo se suas teclas não chegarem ao servidor e continuamente tentar restabelecer a conexão.

A instalação e a configuração são simples: agora está incluída em todas as distribuições atuais do Linux (além de algumas não-Linux) e coordena a inicialização e a autenticação da sessão por meio de uma conexão ssh anterior. Então, se você é capaz de se conectar via ssh user@server , é muito provável que você consiga se conectar com o mosh apenas chamando mosh user@server , se os pacotes mosh estiverem instalados nos dois lados.

O principal motivo para falhas de conexão é que você precisa alcançar o servidor em uma porta UDP (faixa padrão: 60000-61000) para que o mosh funcione. Portanto, se o servidor estiver atrás de um firewall, você estará fora de sorte se não conseguir fazer você mesmo ( ).

    
por 11.08.2014 / 10:26
3

Se você deseja ter um período de conexão mais longo, adicione no cliente:

echo 'ServerAliveInterval 30' | sudo tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config

ServerAliveCountMax , por padrão, está definido como 3. Portanto, uma vez que o ServerAliveInterval tenha enviado 3 pequenos pacotes de informações para o seu servidor, ele será automaticamente desconectado. Configurar para 1200 significa que este processo terá que ocorrer pelo menos 1200 vezes. Em suma, você deve estar conectado pelo menos 30 * 1200 segundos (10 horas).

    
por 05.07.2015 / 00:40
2

Isso geralmente significa que sua conexão de rede (TCP) foi redefinida. Por exemplo. seu provedor de internet reconectou você ou algo assim.

    
por 14.09.2010 / 11:44
1

Eu tive o mesmo problema, mas não é o esperado. Se você achar que na mesma rede que outro servidor está tentando para o mesmo endereço IP, você enfrentará o mesmo problema. Para resolver isso, você precisa verificar se existem outros servidores que usam o mesmo endereço IP. Isso pode ser feito usando o comando arp .

Estou usando o Debian, então aqui está uma amostra dos comandos que eu uso para determinar se outro servidor estava realmente usando o mesmo endereço IP

apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
  192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
  192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

Você notará dois conjuntos de endereços mac usando o mesmo endereço IP. Evite conflitos definindo um para outro endereço IP.

    
por 29.12.2015 / 09:56
0

Outra causa para a mensagem "Broken Pipe" é que outra máquina está tentando usar o mesmo IP do seu host.

Uma maneira simples de testar se alguém está usando esse IP:

  1. Desligue seu host
  2. pingar o mesmo IP para ver se outra máquina está usando esse IP

Para descobrir quais máquinas estão na sua rede, você pode usar este Unix & Título da questão do Linux: Como descobrir quais outras máquinas estão conectadas à rede local .

    
por 26.04.2013 / 23:06

Tags