Windows Vagrant ssh問題がなぜか直った話
ここ2~3週間、vagrant ssh
もできなければssh hostname
もできない、という謎現象で苦しんだ。
うまくいきそうになっても、文字化けでどうしようもなかったり。
試したことがあるはずの解決法で、なぜか今日は解決した。
結論をいえば、
C:\Progran Files (x86)\Git\bin
にパスを通したら、すべてうまくいった。
これ、悪戦苦闘してる間に、一度試した方法ではあるはずなのだが……
思い出せる範囲でのプロセス
いろいろ試したけど、思い出せる範囲で記録しておく。
症状の発端
突然、ssh hostname
ができなくなった。
具体的にいうと、~.ssh\configをsshが読みに行ってくれなくなった。
ssh
に-F
オプションをつけてconfigファイルの場所を指定すれば行けたが、簡便のためにconfigファイル作ってるんであって、そんな面倒くさいことをするのは嫌だった。
その直前に行ったこと:
- cwRsyncのFree Editionに入っているファイルをパスの通っているディレクトリにインストール(この中にssh.exeも入っている)
- chefとknife-solo、win32-process、windows-prをgemでインストール
ここで、chefを試している間は問題なし。
> vagrant ssh-config --host hostname >> %HOME%\.ssh\config
も問題なく、hostnameでsshログインできる。
- VirtualBoxとVagrantのアップデート
ここでssh hostname
ができなくなった。
つまりconfigファイルを読みに行ってくれなくなった。
cwRsyncはCygwin版のrsyncとsshとDLLが同梱されている。
おそらくCygwinのディレクトリ解釈がうまく行っていないのだろうと考えた(だとすると、なぜそれ以前はうまくいっていたのかが謎)。
cwRsync同梱のsshがうまいこと~/.ssh/configを読んでくれる方法を探ったけれど、「Cygwin環境下ではどうすればいいか」という情報しか見つからない(cwRsyncにおいてsshはrsyncのための付属品なので……あまり情報がない)。
これで数日費やした。
次に、cwRsyncで入れたssh.exeを削除。
こんどはvagrant ssh
すらできなくなった。
ここで「あれ?いままではなんでできてたんだろう?」という疑問が発生した。
次に、(たぶんここでGit\binにパスを通すのも試したはず)MSYSにあるbinにパスを通した。
文字化けがひどくてダメ。
ゲスト側(Ubuntuサーバ)でLANG
変数にen_US.UTF-8
を設定すれば、まあ、いけるけど、以前はうまくいってたのに、釈然としない。
それに「ログアウト」の文字はどうしても文字化けする(これはMSYSのssh.exeが吐き出してるのかな)。
Gitを新たにインストール、UNIXツール(msysのコマンドのこと)も使えるパターンでインストールしたけど、やはり文字化け。
次に、使ってるコンソールラッパー(Console2を使っていた)がよくないのかな(シェルがWindowsのコマンドプロンプトで、MSYSのsshを使う、という組み合わせが相性が悪いのかな)と考えた。
まずConsole2のシェルをmsysのbashに変えてみた。
文字化けがひどいのは変わらない。
他のものに変えてみよう、というわけで、Console2の後継であるConsoleZに変えた。
Chocolatayを使ってインストール。
変化なし。
minttyに変えてみる。変化なし。
MSYSを新しい(去年出たのかな?)mingw-getのGUIを使って改めてインストールしてみたりしたけど変化なし。
他にもVirtualPCにVistaを入れて、そこにVirtualBoxをインストールして試そうとしたけど、これは32bit OSでは64bit OSを扱えないという壁に阻まれて断念(Vistaのインストールがちゃんと完了するまで3日ぐらいかかった)。
フォントがマズいのかも、と考えていろいろいじったけど変化なし。
で、「MSYSで文字化けするのにGitのssh使って文字化けしないなんてことはないでしょう(だってWindows版GitはmsysGitだもの)」と思いつつ、C:\Program Files (x86)\Git\bin
にパスを通してみる。
なぜか文字化けしない。
は?
どういうことなんでしょう????
.ssh/configも読みに行っている。
どういうことなんでしょう????
そもそもGitのbinにパスを通していない期間に、なぜvagrant ssh
ができていたのかが謎。
ssh hostname
ができたのはcwRsync同梱版を入れたからかな、と思っていたけど、それもconfigファイルを読みに行ってくれていた理由がわからない。
Windowsを窓からぶん投げたくなりました。
↓が出る頃には間に合いそう。