MANA-DOT

PIXEL ART, PROGRAMING, ETC.

Cygwinで sshが ~/.ssh/config を見てくれない

cygwin

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版にして気持ち起動が早くなった気がする!