As a regular Windows user, I tend to have problems with pretty basic stuff in MacOS as I'm not used to work with it daily. In a travel I made recently, I had to work with my Macbook Pro as this was the laptop I choosed for this travel. During this travel I had to connect to a server through SSH and run some scripts. I use Putty in Windows to connect to my servers, however in this case, I decided to use the OpenSSH builtin cli utility in the MacOS terminal. I noticed after a few connections that if I didn't type anything for about 5 minutes, the connection would simply close and I needed to connect again.
As I always do this of opening a SSH connection, I stay afk for a while and then use it again, I had to research how do configure it to work properly and I will share with you how to keep your SSH connections open in MacOS Monterey.
1. Modify your OpenSSH SSH client configuration file
The first things you need to do is to locate the SSH system-wide configuration file of the system. In MacOS is located at
/etc/ssh/ssh_config. You can modify it using the following command (for more information about this configuration file, read the man page here):
sudo nano /etc/ssh/ssh_config
Alternatively if you don't want to make the modifications at system-wide level but at current user level, modify instead the
sudo nano ~/.ssh/config
In any of this files, you will have to make the modification of the next step to keep connections alive.
2. Keep SSH connections alive
Now all you need to do is to add the
ServerAliveInterval parameter to your settings. This adjustment can be done for every SSH connections or for a specific host. Scroll down to the end of the file and add the parameter with a numeric value that corresponds to the interval in seconds in which the client will send a keep alive header and will prevent the connection from dropping. If you want to do this globally (to any host you may connect, the keep alive header will be sent), configure it like this:
Host * ServerAliveInterval 30
With this configuration the header will be sent every 30 seconds and it should keep the connection alive. In case that this value is not enough and your connections keep dropping, lower this value to your needs (e.g to 10 seconds).
If you need to keep the connection alive only on certain hosts, you may specify the configuration as well like this:
Host mywebsite.com ServerAliveInterval 30
Your configuration file should look like this after making the modification:
Save the changes to the configuration file and reconnect to your servers, the connection should now always be active as long as the terminal process is open (feel free to watch a youtube video and return to your workplace without losing the connection to your server 😳).
Happy coding ❤️!