O que a mensagem de canal quebrado significa em uma sessão SSH?


103

Às vezes, minha sessão SSH se desconecta com uma Write failed: Broken pipemensagem. O que isso significa? E como posso manter minha sessão aberta?

Eu sei screen, mas essa não é a resposta que estou procurando. Eu acho que isso é uma sshdopção de configuração.

Respostas:


89

É possível que o servidor feche as conexões inativas 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 o seu sshd)

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

Ou do lado do cliente:

echo "ServerAliveInterval 60" >> ~/.ssh/config 

NB que às vezes "* AliveInterval" não é suficiente stackoverflow.com/questions/10665267/…
rogerdpack 18/15

1
Não existe ~/.ssh/configno meu Mac, tenho que criá-lo lá ou está em outro lugar?
AGamePlayer

5
@AwQiruiGuo Sim, você deve criar o diretório ( ~/.ssh) primeiro. Entãomkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Gert

6

Uma solução alternativa seria usar mosh- o shell móvel . Ao contrário do ssh, ele se conecta via UDP e suporta roaming. Você pode iniciar sua sessão em casa, suspender seu laptop, levá-lo ao trabalho / amigos / onde quer que tenha internet, desconectar o laptop e continuar trabalhando como se nada tivesse acontecido. É especialmente útil se você estiver com uma péssima conexão com a Internet: mostra feedback instantâneo se as teclas digitadas não chegarem ao servidor e tentar continuamente restabelecer a conexão.

A instalação e a configuração são simples: agora estão incluídas em todas as distribuições atuais do Linux (mais algumas não-Linux) e coordenam a inicialização e a autenticação da sessão por meio de uma conexão ssh anterior. Portanto, se você é capaz de se conectar via ssh user@servervocê provavelmente será capaz de se conectar ao mosh apenas ligando mosh user@server, se os pacotes mosh estiverem instalados nas duas extremidades.

O principal motivo para falhas de conexão é que você precisa acessar o servidor em uma porta UDP (intervalo padrão: 60000-61000) para que o mosh funcione. Portanto, se o servidor estiver protegido por um firewall, você não terá mais sorte se não puder fazer furos nele mesmo ( implicações de segurança ).


3

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

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

ServerAliveCountMaxpor padrão, isso é definido como 3. Portanto, assim ServerAliveIntervalque enviar 3 pacotes pequenos de informações para o servidor, ele será desconectado automaticamente. Configurá-lo para 1200 significa que esse processo terá que ocorrer pelo menos 1200 vezes. Em resumo, você deve estar conectado pelo menos 30 * 1200 segundos (10 horas).


5
Por que usar o sudo para um arquivo que pertence ao usuário atual ou ainda não existe?
Hubert Grzeskowiak

2

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


1

Eu tive o mesmo problema, mas não é o esperado. Se você achar que na mesma rede outro servidor está tentando 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 arpcomando

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.


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 outra pessoa está usando esse IP:

  1. Desligue seu host
  2. faça ping no 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 o título da pergunta Unix e Linux: Como descobrir quais outras máquinas estão conectadas à rede local .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.