ssh 호스트 이름을 기반으로 터미널 창의 배경색을 프로그래밍 방식으로 어떻게 변경할 수 있습니까?
즉, 프로덕션 하드웨어에서 라이브 임베디드 시스템에 ssh ‘s 할 때 터미널 배경이 빨간색으로 변경되어 현재 사용중인 서버의 “인식을 유지”하기를 원합니다. PS1에 호스트 이름 만 있으면 충분하지 않습니다.
gnome-terminal을 사용하고 있지만 Linux에서는 실행 가능한 솔루션을 사용할 수 있습니다.
답변
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를 실행하지 않아도 색상이 설정됩니다.