Changing the shell is very trivial to circumvent, patching the shell itself is better, but you have to patch all shells. Our favourite cracker uses this, as a bonus he doesn't bother himself with disabling bash_history.
ssh host /bin/sh -i
Snoopy is a wrapper around exec functions, and logs any external binary that is executed(not shell builtins)
@David Schmitt's suggestion sniffy uses a better method, it taps the pseudoterminal.
ttysnoop uses the same method, but it is unmaintained. (I probably had issues making it log ssh connections, can't rememeber)
You can try patching ssh to log a session, but that patch is old.
pseudopod and rootsh can be used for logging legitimate sudos. And shwatcr is another thing to monitor logins.
ttyrpldseems good. recommended in this question. serverfault.com/questions/40011/… – hayalci Jul 13 '09 at 20:05