SSH를 통해 연결된 RHEL 시리즈 시스템에서 내 셸이 제대로 작동하지 않는 이유는 무엇입니까?

SSH를 통해 연결된 RHEL 시리즈 시스템에서 내 셸이 제대로 작동하지 않는 이유는 무엇입니까?

SSH를 통해 RHEL 시리즈 호스트(예: Fedora, CentOS 또는 실제 RHEL)에 연결할 때 셸 동작 문제가 계속 발생합니다. SSH를 통해 이 Linux 배포판 제품군에 연결할 때만 이러한 문제가 발생하는 것 같습니다. 이는 선택을 할 때 해당 배포판 사용을 완전히 중단할 계획이 있을 정도로 실망스럽습니다.

바람직하지 않은 동작은 터미널 줄의 시작 부분을 인식할 수 없다는 것입니다. 이로 인해 이전에 사용한 명령을 수정하는 것이 매우 어려워집니다.

나는 $TERM이 SSH 클라이언트와 호스트에서 일치하는지 확인하는 것을 포함하여 과거에 몇 가지 진단을 확인했습니다. 아래 데모에서는 둘 다 동일하게 사용합니다.

nborgers@Persons-Laptop ~ % echo $TERM
xterm-256color
nborgers@Persons-Laptop util % ssh gateway -t 'bash -ic "echo $TERM"' 
xterm-256color
Connection to 10.212.100.192 closed.

이 데모에서 내 클라이언트는 MacOS이지만 WSL(따라서 Linux VM)에서 SSH를 수행할 때도 동일한 문제가 발생합니다.

데모 셸은 MacOS zsh에서 제대로 작동하지만 SSH를 통해 Fedora 인스턴스에 연결할 때는 작동하지 않습니다.

검증된 솔루션 적용: Ansible 플레이북과 다르게 제가 잘못하고 있는 부분은 다음과 같습니다.

nborgers@Persons-Laptop host-config-as-code % git diff --ignore-space-at-eol
diff --git a/ssh/terminal_colors.yaml b/ssh/terminal_colors.yaml
index 6751809..33bb779 100644
--- a/ssh/terminal_colors.yaml
+++ b/ssh/terminal_colors.yaml
@@ -12,6 +12,6 @@
     lineinfile:
       path: /etc/bashrc
       state: present
-      line: 'export PS1="\e[0;{{ color }}m[\u@\h \W]\$ \e[m "'
+      line: 'export PS1="\[\033[01;{{ color }}m\]\u@\h \[\033[0m\]\W $ "'
     when: ansible_os_family == 'RedHat'

분명히 일부 음영 구성을 통해 이 문제가 발생했습니다. 이전에 이 문제를 수행하지 않은 컴퓨터에서 이 문제를 본 것 같지만 더 이상 재현할 수 없습니다.

답변1

데모에서 동작의 일반적인 원인은 프롬프트 문자열에 비인쇄 문자로 적절하게 지정되지 않은 터미널 제어 문자열이 포함되어 있다는 것입니다(예: \[... \]in bash또는 %{... %}in 내에 포함됨 zsh및 유사한 방법) 다른 쉘에서는) ).

차이점은 자동으로 인쇄되지 않는 것으로 간주되는 프롬프트 색상 이스케이프 코드가 내장되어 bash있으므로 zsh다른 셸에 그러한 셸이 필요한지 모를 수도 있다는 것입니다.

따라서 쉘은 프롬프트 문자열이 차지하는 표시 가능한 문자 단위 수를 잘못 계산하여 커서가 다음 줄로 줄 바꿈되어야 하거나 줄 바꿈된 명령줄에서 뒤로 이동할 때 이전 줄로 돌아갈 때 혼란을 야기합니다.

$PS1OR 정의를 확인 $PROMPT하고 해당 쉘의 매뉴얼 페이지에 직접 문서화되지 않은 인쇄되지 않는 문자의 시퀀스가 ​​적절한 쉘 종속 방식으로 포함되어 있는지 확인해야 합니다.

관련 정보