I just had this problem, and solved it, eventually. Firstly, make sure you were having the same issues as me. To do this, check the contents of your /var/log/sshd.log file:
cat /var/log/sshd.log
If the last line reads:
/var/empty must be owned by root and not group or world-writable.
then I can help you. Read on.
All of the following need to run from an elevated cygwin prompt. Right click on the cygwin icon and choose "Run as Administrator..."
First of all you need to change the permissions on /var/empty:
chmod 700 /var/empty
Then you need to change the owner of /var/empty. Now this is the confusing part. The error message in the log file indicates that the directory must be owned by root (SYSTEM on Windows). This is actually incorrect. It must be owned by the account that the windows service is running as. If you followed the openSSH readme, this will probably be cyg_server. Assuming it is, you want to run:
chown cyg_server /var/empty
If you get an error stating that cyg_server is an unknown user, try running:
mkpasswd -l > /etc/passwd
then try running the chown command again.
Hope that helps!