Cosa significa il messaggio Broken pipe in una sessione SSH?


103

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

Lo so screen, ma non è la risposta che sto cercando. Penso che questa sia sshdun'opzione di configurazione.

Risposte:


89

È 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 tuo server (e riavviare il tuo sshd)

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

O lato client:

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

NB che a volte "* AliveInterval" non è sufficiente stackoverflow.com/questions/10665267/...
rogerdpack

1
Non c'è ~/.ssh/configsul mio Mac, devo crearlo lì o è altrove?
AGamePlayer

5
@AwQiruiGuo Sì, è necessario creare prima la directory ( ~/.ssh). Quindimkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Gert,

6

Una soluzione alternativa sarebbe quella di utilizzare moshla 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 la configurazione 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 si è in grado di connettersi tramite ssh user@serverè molto probabile che ci si possa connettere con mosh semplicemente chiamando mosh user@server, 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 ).


3

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

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

ServerAliveCountMaxper impostazione predefinita, questo è impostato su 3. Pertanto, una volta che ServerAliveIntervalha 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
Perché usare sudo per un file che appartiene all'utente corrente o non esiste ancora?
Hubert Grzeskowiak,

2

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


1

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 arpcomando.

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.


0

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 .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.