Nothing for certain here. This could be either because:
The user's name, password, or shell is no longer valid (I suspect you have checked this)?
2a. A global setting has changed to prevent logins (ie, /etc/nologin, /etc/hosts.allow, etc).
2b. A global setting has changed to prevent lookup information from working properly (ie, /etc/nsswitch, /etc/ldap.conf, /etc/yp.conf, etc).
3a. The sshd configuration has changed: the private/public key pair has been regenerated and the client no longer recognizes the server key as valid.
3b. The sshd configuration has changed: the server configuration no longer supports the SFTP module. Check the configuration file for "sftp".
3c. The sshd configuration has changed: the user/group is no longer allowed to access sftp.
Finally, if all that checks out, it's possible there's actually a man-in-the-middle attack being attempted. This is rare, but its worth checking out. Make sure the client sees the same server key for your server.
Right, so it may be that the shell prevents the user from logging in. Do the following:
Create a softlink to /bin/false. Name the new link something like "sftponly". So:
ln -s /bin/false /bin/sftponly
Add "/bin/sftponly" to /etc/shells. So:
echo /bin/sftponly >>/etc/shells
Change user's shell from /bin/false to /bin/sftponly
What will happen is that PAM should allow the user to pass the authentication stages because the user now has a 'valid shell'. But for all other purposes, such as logging in through sshd or telnet or X, it will still not work.
to the best of my knowledge, modern Solaris (2.8, 2.9, 2.10) uses PAM -- Pluggable Authentication Modules. If sshd is set to use PAM (see the sshd.conf file) and the pam_unix module is required for the auth and session parts (see /etc/pam.conf or /etc/pam.d/ssh*) then the shell WILL be checked against /etc/shells.
If you leave the shell field blank, I believe the system will use the default shell (/bin/sh). That might be un-desirable from a security standpoint. But what the hell -- try it and if it doesn't work, then the problem is elsewhere.