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완전히 다른 두 가지 상황에서 로드됩니다.

따라서 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 옵션을 무시하세요.

관련 정보