Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Sometimes my SSH session disconnects with a Write failed: Broken pipe message. What does it mean? And how can I keep my session open?

I know about screen, but that's not the answer I'm looking for. I think this is a sshd config option.

share|improve this question
up vote 50 down vote accepted

It's possible that your server closes connections that are idle for too long. You can update either your client (ServerAliveInterval) or your server (ClientAliveInterval)

         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.

         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.

To update your server (and restart your sshd)

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

Or client-side:

echo "ServerAliveInterval 60" >> ~/.ssh/config 
share|improve this answer
NB that sometimes "*AliveInterval" isn't enough stackoverflow.com/questions/10665267/… – rogerdpack Feb 18 '15 at 16:33
There is no ~/.ssh/config on my Mac, do I have to create it there or it's is somewhere else? – Aw Qirui Guo Sep 6 '15 at 3:40
@AwQiruiGuo Yes, you should create the directory (~/.ssh) first. So mkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config – Gert Sep 7 '15 at 6:43

To make a complementary of Gert's answer, I wrote this article to solve this SSH issue: How to Solve Broken Pipe Message in SSH Session.
Sometimes the network is unstable, so we need a script to auto restart the ssh session, don't we?

share|improve this answer
Instead of creating a custom solution, does harding.motd.ca/autossh fulfill your needs? – bbaja42 May 22 '12 at 7:22
Hello from 2014. The link in this answer no longer works. – CptSupermrkt May 27 '14 at 15:07
The page is now at liangsun.org/posts/… – sep332 Jun 26 '14 at 21:12

An alternative solution would be to use mosh - the mobile shell. In contrast to ssh it connects via UDP and supports roaming. You can start your session at home, suspend your laptop, take it to work / friends / wherever else you have internet, unsuspend your laptop and continue to work as if nothing has happened. It is especially useful if you are on a lousy internet connection: It shows instant feedback if your keystrokes don't reach the server and continuously tries to reestablish the connection.

Installation and setup are simple: It is now included in all current Linux (plus a few non-Linux) distributions and it coordinates the session initialization and authentication via a prior ssh connection. So if you are able to connect via ssh user@server you are very likely to be able to connect with mosh just by calling mosh user@server, if the mosh packages are installed on both ends.

The main reason for connection failures is that you have to reach the server on a UDP port (default range: 60000-61000) for mosh to work. So if the server is behind a firewall you are mostly out of luck if can't punch holes in it yourself (security implications).

share|improve this answer

If you want to have a longer connection period ,in the client add:

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

ServerAliveCountMax by default this is set to 3. Therefore once the ServerAliveInterval has sent 3 small packs of info to your server it will then automatically log out. Setting it to 1200 means this process will have to occur at least 1200 times. In short you should be connected at least more than 12 days.

share|improve this answer

It usually means that your network (TCP) connection was reset. E.g. your internet provider reconnected you or something like this.

share|improve this answer

Another cause for the "Broken Pipe message" is that another machine is attempting use the same IP as your host.

A simple way to test if someone else is using that IP:

  1. Turn off your host
  2. ping the same IP to see if another machine is using that IP

To find out which machines are on your network, you can use this Unix & Linux question title: How to find what other machines are connected to the local network.

share|improve this answer

I had the same problem but it is not as expected. If you find that on the same network another server is trying for the same IP address, you will face the same problem. To solve this you need to check if there are other servers which use your same IP address. This can be done using the arp command.

I am using Debian so here is a sample of the commands that I use to determine if another server was indeed using the same IP address

apt-get install arp-scan
arp-scan -I eth0 -l | grep d4:eb:9a:f2:11:a1 (Unknown) f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

You will notice two sets of mac address using the same IP address. Avoid conflict by setting one to another IP address.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.