Terminal sessions are easy enough to generate if you’re in a GUI, but pretend for a moment you’re on a server; no X. You’ve SSH’ed a couple servers away from your starting point before you realize that you need to attend to something on that first server.
SSH gives you two base options. They’re accessible through escape characters. By default, this is
~, but you can customize it should you find it interferes with some other key combination.
Our first option is to suspend the ssh session entirely. Hit
~^Z. That’s two sequences, a ‘~’ + ‘<ctrl>-Z’. This backgrounds the session; at this point, you can control it as you would any other job:
jobs -l. Thus, when done with whatever commands needed attending, simply return to the ssh session with
The second option relies on the command mode of SSH. Hit
~C. You’re presented with an ssh comand line prompt. From here, you can invoke commands on the local machine; simply preceed the command with
!. For example:
If you can’t get your business done in a one-liner, try:
!bash. You’re now in a complete subshell on the original host. Do what needs doing and when you’ve completed your business,
exit as normal and you’re back inside the ssh process and at the remote host.
The premise of this exercise suggested we were a couple servers away. The first SSH session will hold on to the ~, making communicating with subsequent shells arduous. You can hit ~~, which will cause the first shell to pass the character on through to the next machine. To pass on a tilde to the third shell in line, you’d have to hit ~~~~. This quickly becomes impractical. Consider using screen or tmux.
And that’s it, you can go home again; if just to visit.