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.