SSH 호스트 이름을 기반으로 터미널 배경을 자동으로 변경하는 방법은 무엇입니까?

SSH 호스트 이름을 기반으로 터미널 배경을 자동으로 변경하는 방법은 무엇입니까?

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가 래퍼 스크립트나 별칭을 통해 실행되지 않더라도 색상이 설정된다는 의미입니다.

관련 정보