You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
blogcontent/blog/content/posts/auto-screen.md

2.3 KiB

title date tags
Auto Screen 2022-05-16T17:42:11-07:00 [homelab]

screen (Wikipedia) is a Unix tool that starts a persistent session on a remote machine, allowing you to detach from that session while keeping any running processes alive. It's really useful when executing a long-running process over an unstable ssh connection. There are other ways to achieve that aim (like Background Processes), and other features of screen itself (like fitting multiple panels in a single window), but that's what I primarily use it for.

As I've been building out my homelab, I've had the need to ssh to a bunch of different devices, and it's been awkard to remember to start a new screen session every time I log in. Fortunately, the SSH config file permits the specification of a RemoteCommand directive, which will be "execute[d] on the remote machine after successfully connecting to the server". So, with an ~/.ssh/config that looks like this:

Host host_nickname
  HostName hostname.avril
  RequestTTY force
  RemoteCommand screen -D -RR -p +

I can, by typing ssh host_nickname, immediately connect to the existing screen session on hostname.avril1 (detaching it if it already exists somewhere else), and create a new pane within it. I'd like to tweak this to only open a new pane if there's a process already running in every existing pane (otherwise, open to the first "idle" pane), but that will probably be way more complex!

If I wanted, I could define User and IdentifyFile in that Host definition, but I already have those defined in a Host * wildclass lower down the file (lower down is important! SSH Config binds in discovery order, not in specificity order - so if you have a Host * definition at the top of the file, you won't be able to override it anywhere else).


  1. Why "avril"? It's the local domain name I use for my network - all my homelab machines are assigned the domain name <hostname>.avril by my OPNSense Router's DNS configuration. But why Avril? Because it's the name my partner and I use for our home? Why? Because, during the buying process, everything was so complicated...