Disable all services, except ssh
Solution 1:
This sounds a lot like runlevels, replaced with targets in Systemd. So, instead of writing a script that starts and stop a list of services, you could create a new maintenance.target
containing only the services necessary, like SSH. Of course, SSH is not quite useful without networking, so in this example a simple emergency-net.target
is modified to include SSH.
[Unit]
Description=Maintenance Mode with Networking and SSH
Requires=maintenance.target systemd-networkd.service sshd.service
After=maintenance.target systemd-networkd.service sshd.service
AllowIsolate=yes
Then, you could enter your maintenance mode using
# systemctl isolate maintenance.target
and back
# systemctl isolate multi-user.target
Solution 2:
First list your services and search for their corresponding systemd-names.
Then build a list and stop each list member to enter maintenance, start each member after maintenance.