it-swarm.it

Cosa significa il messaggio Broken pipe in una sessione SSH?

A volte la mia sessione SSH si disconnette con un Write failed: Broken pipe Messaggio. Cosa significa? E come posso tenere aperta la mia sessione?

Conosco screen, ma questa non è la risposta che sto cercando. Penso che questa sia un'opzione di configurazione sshd.

107
Peter Stuifzand

È possibile che il server chiuda le connessioni inattive per troppo tempo. Puoi aggiornare il tuo client (ServerAliveInterval) o il tuo server (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.

Per aggiornare il server (e riavviare sshd)

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

O lato client:

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

Una soluzione alternativa sarebbe quella di usare mosh - la shell mobile . A differenza di ssh, si connette tramite UDP e supporta il roaming. Puoi iniziare la sessione a casa, sospendere il tuo laptop, portarlo a lavoro/con gli amici/ovunque tu abbia Internet, non sospendere il tuo laptop e continuare a lavorare come se nulla fosse successo. È particolarmente utile se sei su una pessima connessione a Internet: mostra un feedback immediato se i tasti premuti non raggiungono il server e cerca continuamente di ristabilire la connessione.

L'installazione e l'installazione sono semplici: ora è incluso in tutte le distribuzioni Linux correnti (più alcune non Linux) e coordina l'inizializzazione e l'autenticazione della sessione tramite una precedente connessione ssh. Quindi, se sei in grado di connetterti tramite ssh [email protected] è molto probabile che tu sia in grado di connetterti con mosh semplicemente chiamando mosh [email protected], se i pacchetti mosh sono installati su entrambe le estremità.

Il motivo principale degli errori di connessione è che devi raggiungere il server su una porta UDP (intervallo predefinito: 60000-61000) per far funzionare mosh. Quindi, se il server si trova dietro un firewall, sei per lo più sfortunato se non riesci a fare buchi da solo ( implicazioni di sicurezza ).

6
Perseids

Se si desidera avere un periodo di connessione più lungo, nel client aggiungere:

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

ServerAliveCountMax per impostazione predefinita, questo è impostato su 3. Pertanto, una volta che ServerAliveInterval ha inviato 3 piccoli pacchetti di informazioni al server, si disconnetterà automaticamente. Impostandolo su 1200 significa che questo processo dovrà avvenire almeno 1200 volte. In breve, dovresti essere connesso almeno 30 * 1200 secondi (10 ore).

5
Francisco Costa

Di solito significa che la connessione di rete (TCP) è stata ripristinata. Per esempio. il tuo provider Internet ti ha ricollegato o qualcosa del genere.

2
maxschlepzig

Ho avuto lo stesso problema ma non è come previsto. Se scopri che sulla stessa rete un altro server sta provando per lo stesso indirizzo IP, dovrai affrontare lo stesso problema. Per risolvere questo problema, è necessario verificare se esistono altri server che utilizzano lo stesso indirizzo IP. Questo può essere fatto usando il comando arp.

Sto usando Debian, quindi ecco un esempio dei comandi che uso per determinare se un altro server stava effettivamente utilizzando lo stesso indirizzo 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)

Noterai due insiemi di indirizzi mac usando lo stesso indirizzo IP. Evita i conflitti impostando uno su un altro indirizzo IP.

1
Bill Ang

Un'altra causa del "messaggio Broken Pipe" è che un'altra macchina sta tentando di utilizzare lo stesso IP dell'host.

Un modo semplice per verificare se qualcun altro sta usando quell'IP:

  1. Spegni il tuo host
  2. ping lo stesso IP per vedere se un'altra macchina sta usando quell'IP

Per scoprire quali macchine sono sulla tua rete, puoi usare questo titolo di domanda Unix e Linux: Come trovare quali altre macchine sono connesse alla rete locale .

0
Josir