Where Are The Wise Men?

Mike's Ramblings

How SSH Knows How to Get Your Keys

| Comments

Most people who work with SSH know that your user's keys and config is at $HOME/.ssh. Or is it? A problem I had revealed that it isn't so cut-and-dried.

I use Cygwin at work, because, well, I need to get work done. I was smart enough a long while back to make my users HOME directory my shared H-drive, as opposed to somewhere on the C-drive. That way if I got a new machine, etc my configs would be safe.

Well, the moment arrived to see if that worked. I got a new hard drive at work a month or so ago and one of the first things I did was install Cygwin. Everything worked great -- except my SSH keys. For some reason, Cygwin's SSH refused to find my private keys, even though I have never moved them. This week I finally dug in to figure out what happened.

I did a ssh -v host and saw this:

Huh? My HOME directory is set to H (/cygdrive/h/, in Cygwin-speech). I mucked around again and it will was in the wrong spot. A few google searches later revealed that OpenSSH doesn't look at the $HOME environment variable at all! Instead it goes by the directory for the user in /etc/passwd. I opened that up and, sure enough, it was set to "/cygdrive/c/". I changed it, saved the file and then it worked.

In an normal Unix instance, this works because, chances are, they will be the same. But I guess when I installed Cygwin I didn't have a HOME variable set, so it defaulted it to the C-Drive. Then when I set it to the H-drive, it just happily used that and let things break.