My ISP is very agressive about killing stalled connections. When no data has gone across an open connection, the ISP kills the connection. This killed ssh connections to remote machines constantly, and I found myself having to reconnect several times an hour if I was working on a machine remotely.
Fortunately, OSX 10.4 uses OpenSSH 3.8, which can send a packet at a regular interval to see if a server is alive. In my situation, this has the side benefit of actually keeping the connection open, since it resets whatever inactivity timer my ISP uses. Setting it up is pretty simple. Add the following to your .ssh/config file:
Host *
ServerAliveInterval 120
ServerAliveCountMax 3
This will send the server a message every 120 seconds, as per the ServerAliveInterval directive. The ServerAliveCountMax command tells it to kill the connection from the client end if the server hasn't responded after three messages (i.e. six minutes).
Mac OS X Hints
http://hints.macworld.com/article.php?story=20051219123255749