CentOS 9 Streamで準備をしてしたら…
2023年のサーバー構築ハンズオンから、CentOS 9 Streamにしようと思って準備をしています。
で、例によって「ずるっこボタン」という、コピペでどんど作業を進めていくマニュアルを整備しているのですが、CentOS 9 Streamになってから、複数行テキスト(コマンド)をコピペしても、そのまま即実行されず、最後に改行キーを押さないと実行されない、という「仕様変更」(?!?!)で悶絶しています。
自分はTTSSH(Tera Term)を普段は使っていますが、WindowsのPowerShellで同様に複数行のコピペをしてみると、こちらはすんなりと実行されます。
ではTTSSHだけがダメなのか?と思って、Puttyでも試してみると、こちらはTTSSHと同様の挙動で、最後に改行キーを押さないと実行してくれません。しかもPuttyで見てみると、何やらコピペした文字列の表示色が変わっています???
これはどう見てもクライアントのせいではなく、サーバー側から何かをしているように思えます。
さすがに頭に来たので、サーバーから何を送ってきているのか、TTSSHでログをバイナリ保存して違いを見てみたら、これはなかなか何とも言えないデータが送られてきていました。
・CentOS 8 Stream
Last failed login: Mon Jan 23 16:38:29 JST 2023 from 210.197.73.2 on ssh:notty There was 1 failed login attempt since the last successful login. ]0;kabu@stream8:~[kabu@stream8 ~]$ ls -al /etc/pass* -rw-r--r-- 1 root root 3188 Jan 19 13:27 /etc/passwd -rw-r--r--. 1 root root 3125 Nov 18 12:04 /etc/passwd- ]0;kabu@stream8:~[kabu@stream8 ~]$
・CentOS 9 Stream
Last login: Mon Jan 23 16:37:40 2023 from 210.197.73.2 ]0;kabu@handson226:~[?2004h[kabu@handson226 ~]$ [7mls -al /etc/pass*[27m [A[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[Cls -al /etc/pass* [A [?2004l -rw-r--r--. 1 root root 2179 1月 23 14:33 /etc/passwd -rw-r--r--. 1 root root 2179 1月 23 14:33 /etc/passwd- ]0;kabu@handson226:~[?2004h[kabu@handson226 ~]$
いやいやいやいや、なんだこりゃ?!っていうかわざわざ入力したコマンド「ls -al /etc/pass*」をサーバー側から一度消して?色を変えたりとか何かしようとしているのかな? 🤔
こんな余計なことは、いったいどこの何がやっているのやら?!
困って部下に愚痴をこぼしたら、
「別のshell使ったらどうなるんですかね?」
って言われて、試しにtcsh入れてchshで切り替えてみたら……なんと普通にコマンドとして貼り付けできましたよ!! 原因はbashのデフォルト動作か!! (/etc/bachrcとか外しても挙動が変わらなかったので、sshdとかbash以外に原因があると思いこんでた)
優秀な部下で助かる!!
(だから愚痴をこぼしてみるんだけどね😆
そして翌日……
bashそのものが原因だと絞り込めたので、かつbashのあとから設定(profileとかbashrcとか)を外しても、特に挙動に変化がないので、そもそものデフォルト設定だろう、と思ってsrc.rpmとかとってきて展開してconfig_top.h(Ver.5から追加されたbashのデフォルト設定を別出しにしたファイルとのこと)を調べてみるも、それらしい設定もなく、行き詰ってしまった。
で、サーバー側から来ているデータを、CentOS8Streamと9Streamで明らかに違うのが、
この、コマンドプロンプトの手前に「[?2004h」という制御コードがついている。
これをTTSSHの対応制御シーケンスで見てみると、
2004 RL_BRACKET Bracketed paste mode を有効にする。
が来ている、と言う事らしい。「Bracketed paste mode」とは、
この機能は xterm 拡張で、有効になっていると、クリップボードからの貼り付け時に文字列の前後に特別なシーケンスを付加するというものです。
具体的には、DECSET の 2004(?2004h) で有効になり、貼り付け時に文字列の前に200~, 後ろに201~ が付くようになります。
ということらしい。こ・れ・だ・!!
原因が判ったらあとは速い。「Bracketed paste mode bash」でググったら、いろいろ出てくるので、一番最初に出てきたサイトを参考に、/etc/inputrcに
# 2023.01.24 T.Kabu # set enable-bracketed-paste off
を程よいところに追記して、問題解決!!
※ちなみにソースと一緒に入っていたCHANGESには、しっかりと
h. Bracketed paste mode is enabled by default.
って書いてあった😅