Cygwin が最近64bit版が正式にリリースされたらしいので、早速入れてみました。 その時、せっかくだから従来使っていた32bit版のCygwinを完全に消して、一から入れなおしたのですが、入れなおしたあとsshが~/.ssh/config を見つけられなくなりました。同様の症状を以前も数回同期の環境で遭遇したので、今回の解決法をメモしておきます。
症状
ホームディレクトリを C:\Users\ユーザ名 にしているのだが、 sshコマンドを叩くと、どうも~/.ssh/configを読みに行ってくれていないらしい。 ssh-keygenしてみると、どうも/home/ユーザ名 に作りに行っているようで、sshにとってのホームディレクトリが異なるらしい。 シェルにログインした時はちゃんとC:\Users\ユーザ名 から始まり、C:\Users\ユーザ名 に置いている.zshrcや.vimrcなど 他のdotfileは読まれているのにおかしいなあ、という状態。
解決
sshコマンドは.ssh/configの場所をどうやら /etc/passwd の値を見て決めるらしいです。 問題となった環境は、環境変数HOMEでホームディレクトリを変更していましたが、それだけではダメらしく、 次のどちらかを行えば、ちゃんと見えるようになります。
/etc/passwd を編集
/etc/passwdを書き換えてしまいます。
ユーザ名:unused:XXXX:XXX:XXXXXXX-XXXXXXX:/home/ユーザ名:/bin/zsh
みたいな感じになっている行を、
ユーザ名:unused:XXXX:XXX:XXXXXXX-XXXXXXX:/cygdrive/c/Users/ユーザ名:/bin/zsh
としてしまいます。
/home/ユーザ名 に C:\Users\ユーザ名 をマウント
/home/ユーザ名にC:\Users\ユーザ名をマウントしてあげて、/home/ユーザ名 の名前でも正しく解決できるようにしてあげます。
Cygwin1.7では、/etc/fstab を編集することで、ホームディレクトリのマウントを行えます。
C:/Users/ユーザ名/ /home/ユーザ名/ ntfs override,binary,auto 0 0
この状態で、Cygwinのプロセスを全て終了して再起動し、mountコマンドを叩き変わっていればOKです。
$ mount C:/Users/ユーザ名 on /home/ユーザ名 type ntfs (binary)
もともと /home/ユーザ名 で利用していたことも有り、今回は後者の方法をとりました。
まとめ
要するに、環境変数と/etc/passwdの値が不整合を起こしていたので、どちらかに合わせましょうというお話。 とはいえ、家の環境では適当にやっても起こったことはなく、会社でのみ(同期のPCも全て会社)起こったので、 /etc/passwdが関係していることもあり、ユーザーがドメインユーザーであることも関係しているかもしれません。
どうでもいいこと
64bit版にして気持ち起動が早くなった気がする!