WindowsからSSHした先でtmuxを上げると変なエスケープシーケンスが表示される件とその対処
忙しい人向け
- Windows 10 1803以降に標準機能として組み込まれているOpenSSH Client (Win32-OpenSSH)が悪さをしている
- 2020-09-08時点で、恐らくWindowsのバージョンに関係無く
OpenSSH_for_Windows_7.7p1
が入っている
- 2020-09-08時点で、恐らくWindowsのバージョンに関係無く
- GitHubから
v8.1.0.0p1-Beta
以降を落としてきて使うことで回避可能
症状
WindowsからSSHした先のUbuntuでtmuxを上げると変なエスケープシーケンスが表示される。
ホスト名やユーザ名は青で伏せているが、プロンプトの前に^[[?1;0c⏎
という文字が、プロンプトの後ろに[?1;0c
という文字が表示されている。
ターミナルエミュレータを変えても再現し、UbuntuやAndroid (Termux)からSSHした場合は再現しなかった。
bash, fish等シェルを変えると表示内容が変わるが、エスケープシーケンスが表示されることに変わりはない。
この時点で色々と調べたがこれといった情報が無く、TODOとしていた。
別の症状に気づいた
Shift
+ Tab
も効かない。
[~
が文字として送信されてしまい、シェルやLanguage Serverの補完を選択する際、前に戻ろうとすると補完が閉じてしまう。
手がかり発見
Windows Terminalのリポジトリに投稿されたissueを発見した。
https://github.com/microsoft/terminal/issues/6769#issuecomment-653985047
これによると、Win32-OpenSSHがキー入力をキャッチして余計な処理をしてしまうらしい。
また、Win32-OpenSSH 8.1以降ではこの点が修正されているらしい。
どちらの問題も解決
とのことで、早速2020-09-08時点で最新のv8.1.0.0p1-Beta
をダウンロードし、このsshバイナリからSSHで繋いでみたところ、
tmuxを上げた際の変な文字列が表示される問題も、Shift
+ Tab
が効かない問題も解決した。
GUIの設定アプリからオプション機能として追加できるOpenSSH Client
は、2020-09-08時点でOpenSSH_for_Windows_7.7p1
だった。
一度GUIからアンインストールして入れ直しても特にアップデートされるようなことは無かった為、こちらから入れるのではなく、GitHubのReleasesから落としてきたバイナリを使うべきだろう。 補完がまともに使えないのは流石にキツい。