
SSH를 통해 연결한 호스트 이름을 기반으로 터미널 창의 배경색을 프로그래밍 방식으로 변경하는 방법은 무엇입니까?
즉, 프로덕션 하드웨어의 라이브 임베디드 시스템에 SSH로 접속할 때 터미널 배경이 빨간색으로 바뀌기를 원합니다. 즉, "현재 사용 중인 서버에 대한 인식을 유지"하기 위함입니다. PS1의 호스트 이름만으로는 항상 충분하지 않습니다.
나는 gnome-terminal을 사용하지만 Linux에서 작동하는 모든 솔루션을 허용합니다.
답변1
ssh LocalCommand를 사용하여 ANSI 이스케이프 시퀀스를 실행하여 배경색을 변경하고 각 호스트(또는 호스트 모드)에 섹션을 할당하여 원격 호스트에 해당하는 적절한 색상을 선택할 수 있습니다.
프로덕션 서버가 "prod로 시작"과 같은 명명 규칙을 따르는 경우 ~/.ssh/config 파일에서 다음 코드 조각을 시도해 볼 수 있습니다.
Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"
와일드카드 패턴을 사용하기 위한 편리한 명명 규칙이 없는 경우 호스트 이름을 공백으로 구분하여 나열할 수 있습니다. 다양한 기타 비프로덕션 서버에 대해 다양한 색상 값과 문자열을 사용하여 추가 호스트 블록을 만들 수도 있습니다.
패턴과 일치하는 호스트에 연결한 후 해당 printf가 로컬에서 실행되어 배경색을 빨간색으로 변경합니다([41m은 배경색으로 빨간색을 선택하고, [2J는 업데이트된 배경색으로 전체 화면을 부분적으로 다시 그립니다. 참조).https://en.wikipedia.org/wiki/ANSI_escape_code더 많은 선택)
이 접근 방식의 가장 큰 문제점은 ssh 세션을 종료할 때 배경색이 지속된다는 것입니다(내가 아는 한). SSH 별칭 또는 쉘 래퍼 스크립트를 printf "\x1b[0m"
재설정으로 호출할 수 있습니다. 반면에 LocalCommand를 통해 배경색을 설정하면 ssh가 래퍼 스크립트나 별칭을 통해 실행되지 않더라도 색상이 설정된다는 의미입니다.