Also, sshd + fwknop (port knocking) is a very secure combo, IMO.
openssh always responds (unless I've missed a recent feature) thus exposing which port its listening on and that you sent a bad key.
The silent failure is preferable for this application.
Port knocking gives you a roughly equivalent layer.
Not to mention: nobody's going to be brute-forcing properly generated keys remotely. And if they're not properly generated, you have much bigger problems.
Like the GP said - you're trading VPN bugs for SSH bugs - and experience shows that betting on SSH is generally wiser.
If you only need TCP/DNS and not a full-blown VPN, a program called sshuttle uses ssh+python to provide excellent seamless poor man's VPN. It's not perfect - e.g., you lose the ip src address on the forwarded connections - but it works amazingly well, much better than e.g. openvpn and most other vpn products I've used.
And you're also manually creating SSH tunnels to do anything else inside that network, so you've got that going for you, too.
It's 2015. A VPN is the settled method for accessing sensitive services inside a private network. Doing otherwise may create great nerd cred but doesn't make you do your job better.
And as others have mentioned, either way it's still good practice to disable password auth, so that you can only connect to SSH using a public/private keypair.
If you're whitelisting IPs, you may as well run it on port 22.
Color me skeptical. I shall decline to "trust you."
Sterling work establishing your own competence there.
So now, since any attack has to be through the bastion, and all bastion errors are looked at by a human (because there should be only a few of them), then you're more likely to notice a breach more quickly because it won't become caught up in your general logs.
It should be noted that it's as easily possible to have the bastion server run an SSH server, and allow SSH access to other servers on your network.