kobar9568のブログ

技術的なメモやその他諸々

WindowsからSSHした先でtmuxを上げると変なエスケープシーケンスが表示される件とその対処

忙しい人向け

  • Windows 10 1803以降に標準機能として組み込まれているOpenSSH Client (Win32-OpenSSH)が悪さをしている
    • 2020-09-08時点で、恐らくWindowsのバージョンに関係無くOpenSSH_for_Windows_7.7p1が入っている
  • GitHubからv8.1.0.0p1-Beta以降を落としてきて使うことで回避可能

症状

WindowsからSSHした先のUbuntuでtmuxを上げると変なエスケープシーケンスが表示される。

f:id:kobar9568:20200908202228p:plain

ホスト名やユーザ名は青で伏せているが、プロンプトの前に^[[?1;0c⏎という文字が、プロンプトの後ろに[?1;0cという文字が表示されている。
ターミナルエミュレータを変えても再現し、UbuntuAndroid (Termux)からSSHした場合は再現しなかった。 bash, fish等シェルを変えると表示内容が変わるが、エスケープシーケンスが表示されることに変わりはない。

この時点で色々と調べたがこれといった情報が無く、TODOとしていた。

別の症状に気づいた

Shift + Tabも効かない。

f:id:kobar9568:20200908203222p:plain

[~ が文字として送信されてしまい、シェルや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だった。

f:id:kobar9568:20200908205224p:plain

一度GUIからアンインストールして入れ直しても特にアップデートされるようなことは無かった為、こちらから入れるのではなく、GitHubのReleasesから落としてきたバイナリを使うべきだろう。 補完がまともに使えないのは流石にキツい。