Conexões SSH congelando com "Falha na gravação: tubo quebrado"

12

Estou conectando a uma caixa do CentOS 5.5 via SSH a partir de uma máquina Ubuntu 11.04.

A conexão parece funcionar como esperado quando está em uso ativo (ou seja, sem atraso ou perda), mas se for deixada inativa por um tempo, ela irá congelar e deixar de responder. Eventualmente, a mensagem de erro "Falha na gravação: canal quebrado" será retornada e voltarei ao prompt da máquina local.

Que tipo de coisas posso fazer para ajudar a depurar isso, descobrir o que está acontecendo e resolver isso? Sendo um desenvolvedor, isso está tornando a minha vida uma dor, tendo que me reconectar constantemente.

Stephen RC
fonte

Respostas:

15

Parece que a configuração SSHD da caixa do CentOS não está definida para manter o cliente KeepAlive.

Solte essas duas linhas na sua configuração do CentOS sshd (/ etc / ssh / sshd_config), reinicie-a e divirta-se!

KeepAlive yes
ClientAliveInterval 60

Enquanto você está nisso, recomendo usar o gnu screenpara manter sua sessão viva no lado do CentOS.

yuriismaster
fonte
1
KeepAlive foi renomeado para TCPKeepAlive e pode ser deixado no valor padrão, que é yes. ClientAliveInterval deve ser suficiente. Veja man sshd_config.
ypid 29/05
9

A resposta real é quase sempre que você tem um dispositivo NAT de algum tipo no caminho, geralmente um firewall, cujas tabelas de estado têm um tempo limite bastante agressivo. Como você deixa sua conexão ssh inativa por alguns períodos de tempo, o dispositivo NAT "esquece" o mapeamento entre o endereço interno e o número da porta de origem e o seu efêmero endereço externo e número da porta NAT.

Quando você tenta fazer algo mais tarde nessa janela ssh, um novo par efêmero de endereço / porta é atribuído a você, do qual o servidor ssh de destino não tem conhecimento e não responde; mais tarde, é atingido um tempo limite local e a conexão é interrompida pela máquina local.

A correção prática para isso é fazer exatamente o que o yuriismaster sugere: habilite o KeepAlives (que garante que o tráfego regular "faça cócegas" nessa entrada da tabela de estados) e use screenno lado remoto (para preservar o estado no caso de as coisas caírem). Só posto esta resposta porque você perguntou o que está acontecendo e o que fazer a respeito. Espero que isso esclareça por que as sugestões do yuriismaster são boas.

Chapeleiro Louco
fonte
Isso faz todo o sentido! Nós temos um NAT com configuração DMZ para esta caixa. Vou tentar a configuração do tempo limite e ver se isso funciona para mim. Obrigado :)
Stephen RC
Estou aceitando a sua, pois você me ajudou a entender as razões por trás do problema. Mas o crédito precisa ir para @yuriismaster para a correção.
Stephen RC
Valorin: absolutamente, e ele foi o primeiro. Francamente, acho que ele merece mais do que eu; mas é sua pergunta, então deve ser como você achar melhor. Obrigado pelo feedback, de qualquer forma.
MadHatter