Tell me more ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Is there a way to connect to an ssh session that was disconnected? We are having problems with our network connection to a remote site that we are working on separately; however, in the mean time we experience a large number of disconnects due to lost packets while connected to servers at the remote location. Many times the session stays active for a while, and sometimes it happens to be in the middle of some action (file editing, running some process, etc...) that I need to get back to rather than restart if possible.

share|improve this question

12 Answers

up vote 59 down vote accepted

This isn't an answer, but a workaround. Use screen.

When you first log in, run screen. You get another shell, run commands in that. If you're disconnected, the screen process keeps the terminal alive so that your shell and the processes it is running don't fall over. When you reconnect, run 'screen -r' to resume.

There's a bunch more to configuring and using screen, but the above should workaround your problem.

share|improve this answer
Or use tmux - a 'cooler' screen, I've used both and much prefer tmux because you can split the term nicely. – John Hunt Sep 19 '12 at 13:38

Try to set ClientAliveInterval (e.g. 60) and TCPKeepAlive (yes or no) to appropriate values on the serverside sshd.conf .

This should keep your session alive even if the connection gets lost for minutes.

share|improve this answer
5  
So far, you seem to be the only one actually answering the question instead of suggesting screen as a workaround. – kbyrd Jun 4 '09 at 13:20
1  
Good call. We've found this method particullarly useful when traversing cisco ASA/PIX firewalls, which by default love to time out tcp connections. – Mike Pountney Jun 4 '09 at 13:21
2  
Maybe this isn't the right place to ask, but is it possible for the poster to switch answers? We should the 'screen' answer (mine's not the best, I like Mike Pountney's, but I got the rep) in with this information. – kbyrd Jun 4 '09 at 13:27
Will this work when connected over a Cisco VPN connection, and the VPN connection is lost and re-established? – Brent Jun 4 '09 at 14:26

As mentioned above, GNU Screen is the way to go. It will allow you to have a 'screen session' on the remote box that you can run multiple commands in, via multiple 'screen windows'. This will simply detach if your parent SSH connection dies, keeping all the subprocesses running within it alive and well.

'man screen' is your friend as usual, and the OS package should be called 'screen' if it is not installed by default.

Basics are:

  • Start a screen session (on your remote host):

    $ screen

  • Disconnect from your screen session: CTRL-A, d

  • Reconnect to your screen session after logging back in again:

    $ screen -d -r

  • Open another screen 'window': CTRL-A, c

  • Cycle through you open screen windows: CTRL-A, space

There is lots of cool stuff you can do with Screen. I've been using it for over 10 years, and still am finding out new features. It's my favourite Unix utility.

share|improve this answer
1  
Yea, this is a much better answer than mine. – kbyrd Jun 4 '09 at 13:20

I'd install and start screen to fix your problem. Screen will let you reconnect to a previous screen session.

Apart from that, screen also let's you do cool things like split your screen, view the console etc. You can find more info here and here.

For starters, if you get disconnected, you can use

screen -ls

to view your sessions and

screen -r ${session}

to reconnect to a disconnected one.

share|improve this answer

autossh watches your connection and if it goes down, it reconnects. It is more reliable than keepalives.

share|improve this answer

You can use screen. Screen sessions can be detached (when connection is lost) and resumed later on a different or the same terminal.

share|improve this answer

As others have pointed out, screen is generally the best solution for this and it adds a host of other useful features too.

You can setup your profile on the remote machine to automatically start and/or reconnect to screen on login, which saves you forgetting to start screen the one time you need it because you suffer a connection drop.

See http://tlug.dnho.net/?q=node/239 (or search Google for many other examples dones slightly different ways).

share|improve this answer
Nice script in that link, thanks! – palehorse Jun 4 '09 at 14:26

Use screen

Example for a debian/ubuntu server, including installing screen if it's missing (comments start with #):

ssh myserver
sudo apt-get install screen
screen
#press enter to clear welcome message (once you've read it)
tail -f /var/log/messages  #some long running command that you want to return to
~.  #disconects ssh session, must be after pressing enter, c.f. 'man ssh'

later that day:

ssh myserver
screen -dr

now you see your tail still running

for a quick reference type

Ctrl+A Shift+?

Full manual: http://www.gnu.org/software/screen/manual/html_node/Overview.html#Overview

share|improve this answer

The screen solution is the more practical and secure, i use it everyday and with an autoconnect script is a live saver!

share|improve this answer

Autossh is a very useful way of doing this. It starts an ssh process and then monitors it - if the ssh connection drops, it will restart it again and reconnect.

share|improve this answer

a more modern alternative to screen, alas not available to some types of "virtualisation" (e.g. in cygwin you can have "screen", but not "tmux" due to the way it's designed), but wherever you have the option to install tmux, I'd strongly recommend to go for that one insted of screen.

share|improve this answer

While screen will keep your shell session open on the remote server if your ssh session drops, it won't do anything about the problem of ssh connections being dropped. As zero_r suggests, try tuning your ssh connection with keep alives and long timeouts.

I suggest you track down the cause of the lost packets causing the problems and fix that instead of working around it.

share|improve this answer
Thanks for the suggestion. We are working on tracking down the root problem of packet loss, it's simply taking a while to figure it out (very tricky, this one!). This really is a work-around for this trouble period. One never knows when something will cause a dropped connection. – palehorse Jun 4 '09 at 13:40
It will generate a lot of noise, but you can try running ssh through strace and see what it doing/reports when the ssh connection drops. It might just report what you already know, but who knows... – David Jun 4 '09 at 15:42

Your Answer

 
discard

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.