In FreeBSD, sshd by default gets started quite late in the boot process, about the same time a console will show the login prompt. There’s quite a few services that can make trouble and hang before that. Annoyingly, you can’t fix a stuck system via ssh, since it’s not started yet. But as it turns out, sshd can be started quite a bit earlier than FreeBSD does by default.
The rcorder keywords in /etc/rc.d/sshd normally look like this:
# PROVIDE: sshd # REQUIRE: LOGIN cleanvar # KEYWORD: shutdown
Change the rcorder keywords like so:
# PROVIDE: sshd # REQUIRE: NETWORKING cleanvar # BEFORE: mountcritremote # KEYWORD: shutdown
Now sshd will be started right after the network has been configured.
Note that starting sshd before certain parts of the system are ready might give you temporary or permanent errors. For example, starting sshd before the user home directories are mounted might cause problems with logins. However, if your machine has all critical filesystems on local disks, making these changes should not pose any problems, and will allow you to log in while the rc scripts are still running, giving you the opportunity to fix any misbehaving services.