To close the loop on this, I wanted to report back and document what I ended up doing for anyone else looking to make screen sharing a bit more secure. This worked for me but if your Mac bursts into flames, sorry.
Modified from https://gist.github.com/mhofman/171539fa11052aae785fd19d8b382664
Force screen sharing to listen on localhost only and connect via ssh tunnel
The solution is to disable the /System/Library/LaunchDaemon and use a "launcher" daemon that will forcibly load the modified /Library/LaunchDaemon. You must still activate Screen Sharing through the preferences or else it will end up in observe only mode.
On the remote host:
Activate Screen Sharing in the System Preferences
$ sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
In /Library/LaunchDaemons/com.apple.screensharing.plist, edit the Sockets section. This will force screen sharing to listen on localhost only.
<key>Sockets</key>
<dict>
<key>Listener</key>
<dict>
<key>SockNodeName</key>
<string>localhost</string>
<key>SockServiceName</key>
<string>vnc-server</string>
</dict>
</dict>
Create /Library/LaunchDaemons/com.apple.screensharing.launcher.plist with the following content:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.screensharing.launcher</string>
<key>LaunchOnlyOnce</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>load</string>
<string>-F</string>
<string>/Library/LaunchDaemons/com.apple.screensharing.plist</string>
</array>
</dict>
</plist>
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
$ sudo launchctl load -w /Library/LaunchDaemons/com.apple.screensharing.launcher.plist
Create an ssh tunnel and use vnc over the tunnel
On the local client:
$ ssh user@remotehost -L 5901:localhost:5900
Then using Connect to Server (Command-K) connect to vnc://localhost:5901
I chose 5901 as the local port but it can be any unused port above 1024.
Enable password-less ssh key login
On the local client:
If ~/.ssh/id_ed25519.pub doesn’t already exist, run:
$ ssh-keygen -t ed25519
Accept the defaults
Copy the contents of id_ed25519.pub to the remote host:
$ cat ~/.ssh/id_ed25519.pub | ssh user@remotehost 'cat >> ~/.ssh/authorized_keys'
Now, ssh should login using the key.
Force ssh-key-ONLY login
On the remote host, first make sure password-less key login from all required clients works.
Edit /etc/ssh/sshd_config and change these lines to the following:
PasswordAuthentication no
ChallengeResponseAuthentication no
Now, you can only ssh in with a key, a password is not accepted.