Às vezes, minha sessão SSH se desconecta com um Write failed: Broken pipe
mensagem. 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. Eu acho que essa é uma opção de configuração sshd
.
É 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 reinicie seu sshd
)
echo "ClientAliveInterval 60" | Sudo tee -a /etc/ssh/sshd_config
Ou do lado do cliente:
echo "ServerAliveInterval 60" >> ~/.ssh/config
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 você 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 não chegarem ao servidor e tentar continuamente restabelecer a conexão.
A instalação e a configuração são simples: agora está incluído em todas as distribuições atuais do Linux (mais algumas não-Linux) e coordena a inicialização e a autenticação da sessão por meio de uma conexão ssh anterior. Portanto, se você conseguir se conectar via ssh [email protected]
é muito provável que você consiga se conectar ao mosh ligando para mosh [email protected]
, 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ê estará quase sem sorte se não puder fazer furos nele mesmo ( implicações de segurança ).
Se você deseja ter um período de conexão mais longo, no cliente, adicione:
echo 'ServerAliveInterval 30' | tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | tee -a ~/.ssh/config
ServerAliveCountMax
por padrão, isso é definido como 3. Portanto, uma vez que o ServerAliveInterval
envie 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).
Isso geralmente significa que sua conexão de rede (TCP) foi redefinida. Por exemplo. seu provedor de internet reconectou você ou algo assim.
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 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.
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:
Para descobrir quais máquinas estão na sua rede, você pode usar este título de pergunta para Unix e Linux: Como descobrir quais outras máquinas estão conectadas à rede local .