SSHでファイルを検索すると制御文字が生成されるのはなぜですか? [閉鎖]

SSHでファイルを検索すると制御文字が生成されるのはなぜですか? [閉鎖]

/var/iot/dataリモートでデータをインポートするデバイスがあります。

機械自体から:

# cat /var/iot/data | xxd -ps -c 32
80de004a030270055678013ac591e5c6abac2185f4319c8088e3

これは正確なデータです。

同じタスクをリモートで実行すると正しく表示されます。

$ ssh -T -x dragino 'cat /var/iot/data | xxd -ps -c 32' 
80de004a030270055678013ac591e5c6abac2185f4319c8088e3

しかし、実際には複数のエスケープシーケンスを介して行われます。

$ ssh -T -x dragino 'cat /var/iot/data | xxd -ps -c 32' | xxd
00000000: 1b5d 3131 3b23 3138 3464 3666 0738 3064  .]11;#184d6f.80d
00000010: 6530 3034 6130 3330 3237 3030 3535 3637  e004a03027005567
00000020: 3830 3133 6163 3539 3165 3563 3661 6261  8013ac591e5c6aba
00000030: 6332 3138 3566 3433 3139 6338 3038 3865  c2185f4319c8088e
00000040: 330a 1b5d 3131 3b23 3139 3139 3730 07    3..]11;#191970.

.]11;#184d6f.そもそもこれは何だったの?

答え1

順序は

OSC 1 1 ; # 1 8 4 d 6 f BEL
OSC 1 1 ; # 1 9 1 9 7 0 BEL

これはxterm制御シーケンス端末テキストの背景色の設定を要求します。コマンドの出力をシェルプロンプトと区別するためにこれらのファイルが出力されるように、誤って作成されたシェル初期化ファイルが原因で発生する可能性がありますが、これは無条件に行われます。

答え2

あなたはおそらくbashの奇妙な動作に閉じ込められているでしょう。初期化ファイル。 Bashは.bashrcまったく異なる2つの状況でロードされます。

したがって、SSHを介してログインしたときに.bash_profileシェルが対話型の場合、bashは.bashrcそうでない場合にロードされます。-Tに渡してもこれに影響を与えず、実際にあなたの場合にはほとんど影響しません。コマンドを渡すか、またはに渡さないと、SSHが端末をssh生成するためです。-tssh

あなたのコード.bashrcには、いくつかのエスケープシーケンスを発行して端末と対話するいくつかのコードが明確に含まれています(具体的には背景色の設定)。これらの混乱を避けるために何も実行しないでください。.bashrc混乱を避けるために、bashがインタラクティブに実行されない場合、これを一番上に置く.bashrc:

if [[ $- != *i* ]]; then return; fi

答え3

sshどの端末がリモートであるかを常に知るために、sshの前に端末の背景を設定する関数があります。みんなの時間を無駄にしてすみません。

答え4

-Tオプションを使用すると、sshリモートSSHサーバーは仮想端末をセッションに割り当てるため、プログラム(シェルなど)はそれに応じて機能します。

任意のデータを転送するには、この-T オプションを無視してください。

関連情報