GitBash上で「vagrant ssh」したらSSH中のCTRL-Cで、SSH自体が強制終了してしまう

仮想環境の生成をコマンドでできる「Vagrant」のネタです。

普段は使ってませんが、ちょっと使う機会があったので、いろいろとイジっていたら、GitBash(git version 2.37.1.windows.1)上で「vagrant ssh」したらSSH中のCTRL-Cで、SSH自体が強制終了してしまう不具合に遭遇!

詳しくは、下記のGitHubのissueあたりらしいのですが、このissueではGitBashから直接SSHしたときの話がメインでVagrantの話ではありません。どうやらGitBashから直接SSHでは問題が解決されているようですが、Vagrant sshの不具合は放置っぽい感じで抜本的に直す方法がないようです。

https://github.com/git-for-windows/git/issues/3848

GitBashから直接SSHすれば、この問題には直面しない(FIXされた)ことから、vagrantの内部でsshコマンドを呼び出す際に、環境変数とかが不具合を起こすダメダメな状態で起動してるっぽいです。おそらく、環境変数MSYS=enable_pconあたりっぽい。

で、強引に解決する方法が、vagrantのディレクトリに移動してから「vagrant ssh」ではなく、下記のコマンドにすればOKでした。

使いづらい…

$ vagrant.exe ssh-config > ssh-config-file
$ ssh default -F ssh-config-file

一度、vagrantからsshd-configを外部ファイルに出力しておいて、それをsshで読み込んでログインという強引な方法です。

1行目の「vagrant.exe」の拡張子付きで実行もミソです。

~/.bashrcで「alias vagrant=’winpty vagrant.exe’」としてwinpty経由で動かしてる場合、その副作用で「stdout is not a tty」とエラーが出て怒られます。それを回避するために拡張子付きで実行しています。

もし、このaliasをエントリしていなければ、拡張子(.exe)なしでもOKです。もしくは、このコマンドの前に「unalias vagrant」としてもおっけ。

最後に重要なのは、このssh-config-fileの中にはポートフォワードするポートが設定情報として入っており、vagrantで仮想OSを起動する毎に、このポートが違うものになるので都度、ssh-config-fileは出力しないとダメです。

使いづらい…