OpenSSH on windows
I've been using openssh provided by http://www.mls-software.com/opensshd.html on windows 7 ultimate, and discovered the problem following the instructions to generate keys for github on https://help.github.com/articles/generating-ssh-keys.
If I generate the keys and then try to ssh localhost on the same machine, the banner displays but immediately I get "Connection closed by 127.0.0.1". However, if remove the keys from home/.ssh directory and try to ssh localhost on again, it works and prompts me for my password as it did before generating the keys. With this, I've deducted that the keys are relate to the cause of the server closing the connection.
I've tried running opensshd in debug mode, and it works as expected without closing. It seems this problem happens when I try to start opensshd as a service like normal (using the command prompt and typing 'net start opensshd' or by starting it via Windows Services)
What's causing this?
Please don't do that again and please share the solution you found so that, as mentioned, others can learn from it.
The problem is solved. The problem comes from the account running the service. I'm guessing that opensshd.exe that comes with the OpenSSH bundle checks the environment variables of the user that runs it. By default, services are run by the local system administrator account, and I've deducted that it tries to read the that user's profile, which is buried in "C:\Windows\System32\config\systemprofile" (at least on a Win7 machine). It can be fixed by using Windows Services and selecting 'properties' of 'OpenSSH Server' service to change the log-on account from 'Local System Administrator' to 'this account' (and setting the username/password accordingly). Of course, the service must be restarted for the changes to take effect.
This resolves the connection-closed issue, but it still prompts for the ssh session password even if the keys are set. I've deducted that OpenSSH is being picky about permissions, but changing the option from 'yes' to 'no' for the variable 'StrictModes' in the file located at "OpenSSH/etc/sshd_config" and restarting the service fixes this problem and it will run as expected.
Update: The cygwin mailing lists address this problem sometime in the past http://cygwin.com/ml/cygwin/2008-11/msg00378.html
Running OpenSSH as the local system account is not possible, it should be run as the current user as a service instead.