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


9

ssh 호스트 이름을 기반으로 터미널 창의 배경색을 프로그래밍 방식으로 어떻게 변경할 수 있습니까?

즉, 프로덕션 하드웨어에서 라이브 임베디드 시스템에 ssh 's 할 때 터미널 배경이 빨간색으로 변경되어 현재 사용중인 서버의 "인식을 유지"하기를 원합니다. PS1에 호스트 이름 만 있으면 충분하지 않습니다.

gnome-terminal을 사용하고 있지만 Linux에서는 실행 가능한 솔루션을 사용할 수 있습니다.

답변:


7

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를 실행하지 않아도 색상이 설정됩니다.


훌륭한 답변! 내가보고있는 문제는, 그러나 중요한 것은 색상 변경이 첫 번째 "화면"에 대해서만 유지된다는 것입니다. 명령이 입력되고 화면이 위로 스크롤되면 빨간색에서 검은 색으로 바뀝니다. 아마도 그놈 터미널 색상 제어가 ANSI 이스케이프 시퀀스를 재정의하고 있습니까? 해결 방법을 알고 있습니까?
Mtl Dev

아마도 SSH 호스트의 PS1 프롬프트 변수와 비슷한 것을 할 수 있습니까?
Mtl Dev

재설정은 PS1 프롬프트 변수의 시퀀스 또는 ls별칭 ls --color=auto과 같은 명령이 있고 재설정 시퀀스 '<ESC> [0m'을 포함하는 경우 발생할 수 있습니다 . 그래도 지속하려면 다른 gnome-terminal 프로파일을 설정하고 랩퍼 스크립트 경로로 이동하여 호스트 이름을 기반으로 프로파일 이름을 선택하고 호출해야합니다.gnome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp

당신이 옳습니다 : ls --colourPS1에 OR 시퀀스 가 있거나 OR이 있으면 둘 중 하나만 이전 ansi 색상 설정보다 우선합니다. 따라서 제안 된 래퍼 스크립트 솔루션을 구현하는 방법도 살펴볼 것입니다. Merci beaucoup!
Mtl Dev

다른 사람들도 알고 있습니다 : ~ / .ssh / config에 printf를 추가하면 rsync가 중단됩니다. 관련 세부 사항은 여기 : serverfault.com/questions/267154/…
Mtl Dev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.