If your login shell won't even start then you cannot log in. The client sends a string to the server and it's up to the user's login shell on the server to interpret the string. The client has no way to tell the server “run some other command instead”.
This is a security mechanism: if a user's shell is restricted in what it can do, then the user can't do anything that it doesn't permit.
If you've blocked access to all the accounts on the system, then you'll have to use some method that bypasses normal logins, such as physical access or a recovery console.
- When doing maintenance, always keep a root shell open and don't close it until you've tested that everything works.
- Install a statically-linked shell on an account with sudoer rights. I don't see any prepackaged by Arch. Debian has a few; you could just copy the executable and add it to
- Make sure that you have a way to get root even if some things are broken; either set root's shell to
sash something similar, or set up a toor account (alternate way for root to log in). Keep in mind that
sudo could break too; you may want to have an emergency password on the toor account that's randomly generated (unique and not memorized) and written down on a piece of paper that you keep in a safe.