특정 서버로 SSH를 연결할 때 Apple 터미널 창의 색 구성표가 자동으로 변경되도록 하려면 어떻게 해야 하나요?

StackOverflow https://stackoverflow.com/questions/157959

  •  03-07-2019
  •  | 
  •  

문제

원격 프로덕션 서버에 SSH로 접속할 때 터미널 창의 색 구성표를 밝고 무서운 색상(가능한 빨간색)으로 변경하여 라이브 무서운 서버를 만지고 있음을 경고하고 싶습니다.

어딘가에 SSH를 연결했다는 것을 자동으로 감지하고 해당 위치가 특정 목록에 있는 경우 색 구성표를 변경하려면 어떻게 해야 합니까?

Terminal.app의 구성표를 업데이트하고 싶지만 순수 Linux/Unix 환경에서 이 작업을 어떻게 수행할지 모르겠습니다.

도움이 되었습니까?

해결책

다음 스크립트를 넣으십시오 ~/bin/ssh (보장하다 ~/bin/ 전에 보았다 /usr/bin/ 당신의 길에서) :

#!/bin/sh

HOSTNAME=`echo $@ | sed s/.*@//`

set_bg () {
  osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}

on_exit () {
  set_bg "{0, 0, 0, 50000}"
}
trap on_exit EXIT

case $HOSTNAME in
  production1|production2|production3) set_bg "{45000, 0, 0, 50000}" ;;
  *) set_bg "{0, 45000, 0, 50000}" ;;
esac

/usr/bin/ssh "$@"

위의 스크립트는 "username@host"라인에서 호스트 이름을 추출합니다 ( "ssh user@host"가있는 원격 호스트에 로그인 한 것으로 가정합니다).

그런 다음 호스트 이름에 따라 빨간 배경 (프로덕션 서버의 경우) 또는 녹색 배경 (기타)을 설정합니다. 결과적으로 모든 SSH 창은 색상이있는 배경을 갖습니다.

여기서 기본 배경이 검은 색이라고 가정하므로 스크립트는 원격 서버에서 로그 아웃 할 때 배경색을 검은 색으로 되돌립니다 ( "Trap on_exit"참조).

그러나이 스크립트는 한 호스트에서 다른 호스트로 SSH 로그인 체인을 추적하지 않습니다. 결과적으로 먼저 테스트 서버에 로그인 한 경우 배경이 녹색이됩니다. 그런 다음 프로덕션에 로그인하십시오.

다른 팁

터미널의 덜 알려진 기능은 설정 프로파일의 이름을 명령 이름으로 설정할 수 있으며 어느 쪽을 통해 새 터미널을 만들 때 해당 프로파일을 선택한다는 것입니다. 쉘> 새로운 명령… 또는 쉘> 새로운 원격 연결….

예를 들어, 기본 프로파일을 복제하고 이름을 "SSH"로 이름을 밝히고 배경색을 빨간색으로 설정하십시오. 그런 다음 사용하십시오 새로운 명령… 실행하려면 ssh host.example.com.

또한 인수와 일치하므로 예를 들어 다른 원격 호스트에 대해 다른 설정을 선택할 수 있습니다.

다음은 출구를 처리하는 몇 가지 기존 답변을 기반으로 한 결합 된 솔루션입니다. 16 비트 컬러 값을 처리하고 싶지 않은 경우 약간의 추가 기능이 포함되어 있습니다.

이것은 당신의 안에 넣어야합니다 ~/.bash_profile

# Convert 8 bit r,g,b,a (0-255) to 16 bit r,g,b,a (0-65535)
# to set terminal background.
# r, g, b, a values default to 255
set_bg () {
    r=${1:-255}
    g=${2:-255}
    b=${3:-255}
    a=${4:-255}

    r=$(($r * 256 + $r))
    g=$(($g * 256 + $g))
    b=$(($b * 256 + $b))
    a=$(($a * 256 + $a))

    osascript -e "tell application \"Terminal\" to set background color of window 1 to {$r, $g, $b, $a}"
}

# Set terminal background based on hex rgba values
# r,g,b,a default to FF
set_bg_from_hex() {
    r=${1:-FF}
    g=${2:-FF}
    b=${3:-FF}
    a=${4:-FF}

    set_bg $((16#$r)) $((16#$g)) $((16#$b)) $((16#$s))
}

# Wrapping ssh command with extra functionality
ssh() {
    # If prod server of interest, change bg color
    if ...some check for server list
    then
        set_bg_from_hex 6A 05 0C
    end

    # Call original ssh command
    if command ssh "$@"
    then
        # on exit change back to your default
        set_bg_from_hex 24 34 52
    fi
}
  • set_bg- 4 (8 비트) 색상 값을 가져갑니다.
  • set_bg_from_hex- 4 개의 16 진수 값을 취합니다. 내가 사용하는 대부분의 색상 참조는 16 진수에 있으므로 이것은 더 쉽게 만듭니다. RR GG BB 대신 #RRGGBB를 실제로 구문 분석하기 위해 한 걸음 더 나아갈 수 있지만 나에게 잘 작동합니다.
  • SSH- 원하는 사용자 지정 로직으로 기본 SSH 명령을 포장합니다. IF 문은 출구를 처리하여 배경색을 재설정하는 데 사용됩니다.

답변 결합 1 그리고 2 다음이 있습니다.

만들다 ~/bin/ssh 설명 된대로 파일 1 다음 내용으로 :

#!/bin/sh
# https://stackoverflow.com/a/39489571/1024794
log(){
  echo "$*" >> /tmp/ssh.log
}
HOSTNAME=`echo $@ | sed s/.*@//`
log HOSTNAME=$HOSTNAME
# to avoid changing color for commands like `ssh user@host "some bash script"`
# and to avoid changing color for `git push` command:
if [ $# -gt 3 ] || [[ "$HOSTNAME" = *"git-receive-pack"* ]]; then
  /usr/bin/ssh "$@"
  exit $? 
fi

set_bg () {
  if [ "$1" != "Basic" ]; then
    trap on_exit EXIT;
  fi
  osascript ~/Dropbox/macCommands/StyleTerm.scpt "$1"
}

on_exit () {
  set_bg Basic
}


case $HOSTNAME in
  "178.222.333.44 -p 2222") set_bg "Homebrew" ;;
  "178.222.333.44 -p 22") set_bg "Ocean" ;;
  "192.168.214.111") set_bg "Novel" ;;
  *) set_bg "Grass" ;;
esac

/usr/bin/ssh "$@"

실행 가능 : chmod +x ~/bin/ssh.

파일 ~/Dropbox/macCommands/StyleTerm.scpt 다음 내용이 있습니다.

#https://superuser.com/a/209920/195425
on run argv
  tell application "Terminal" to set current settings of selected tab of front window to first settings set whose name is (item 1 of argv)
end run

단어 Basic, Homebrew, Ocean, Novel, Grass Mac OS 터미널 설정에서 나온 것입니다 CMD,: terminal profiles

.bashrc에서 $ ps1 변수를 설정할 수 있습니다.

red='\e[0;31m'
PS1="$\[${red}\]"

편집 :이 작업을 수행하려면 터미널을 엽니 다. 그런 다음 말하십시오

#touch .bashrc

그런 다음 textedit 또는 in에서 .bashrc를 열 수 있습니다 TextWrangler 이전 명령을 추가하십시오.

또 다른 솔루션은 SSH 구성 파일에서 Colors Strait을 설정하는 것입니다.

내부 ~/.ssh/config

Host Server1
   HostName x.x.x.x
   User ubuntu
   IdentityFile ~/Desktop/keys/1.pem
   PermitLocalCommand yes
   LocalCommand osascript -e "tell application \"Terminal\" to set background color of window 1 to {27655, 0, 0, -16373}"

Host Server2
   HostName x.x.x.x
   User ubuntu
   IdentityFile ~/Desktop/keys/2.pem
   PermitLocalCommand yes
   LocalCommand osascript -e "tell application \"Terminal\" to set background color of window 1 to {37655, 0, 0, -16373}"

Xterm 호환 Unix 터미널에는 배경색과 전경색을 설정하기 위한 표준 이스케이프 시퀀스가 ​​있습니다.Terminal.app이 이를 공유하는지 잘 모르겠습니다.그래야 한다.

case $HOSTNAME in
    live1|live2|live3) echo -e '\e]11;1\a' ;;
    testing1|testing2) echo -e '\e]11;2\a' ;;
esac

두 번째 숫자는 원하는 색상을 지정합니다.0=기본값, 1=빨간색, 2=녹색 등따라서 이 스니펫을 공유 .bashrc에 넣으면 라이브 서버에서는 빨간색 배경이, 테스트 서버에서는 녹색 배경이 표시됩니다.로그아웃할 때 배경을 재설정하려면 이와 같은 것을 추가해야 합니다.

on_exit () {
    echo -e '\e]11;0\a'
}
trap on_exit EXIT

편집하다:Google은 다음과 같은 방법을 찾았습니다. AppleScript를 사용하여 배경색 설정.분명히 이것은 Terminal.app과 동일한 시스템에서 실행될 때만 작동합니다.몇 가지 래퍼 함수를 ​​사용하여 이 문제를 해결할 수 있습니다.

set_bg_color () {
    # color values are in '{R, G, B, A}' format, all 16-bit unsigned integers (0-65535)
    osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}

sshl () {
    set_bg_color "{45000, 0, 0, 50000}"
    ssh "$@"
    set_bg_color "{0, 0, 0, 50000}"
}

라이브 서버에 연결할 때 ssh 대신 sshl을 실행해야 한다는 것을 기억해야 합니다.또 다른 옵션은 알려진 라이브 호스트 이름에 대한 인수를 검색하고 그에 따라 배경을 설정하는 ssh용 래퍼 함수를 ​​작성하는 것입니다.

SSH를 통해 로그인 할 때마다 쉘 프롬프트를 변경하지 않겠습니까? 일반적으로 특정 쉘 변수가 있습니다. ssh_client, ssh_connection, ssh_tty

서버에서 터미널 색상을 설정하십시오 /.bashrc

나는 같은 것이 필요했습니다. 제가 준비 환경이 아닌 준비 또는 제작 서버에 있다는 것을 알게해야 할 것이 필요했습니다. 특히 루비 콘솔이나 무언가에있을 때는 말하기가 매우 어려울 수 있습니다.

이것을 달성하기 위해 나는 그것을 사용했다 setterm 내 서버의 명령 ~./bashrc 연결할 때 터미널의 색상을 반대하고 종료 할 때 색상을 복원합니다.

~/.bashrc

# Inverts console colours so that we know that we are in a remote server. 
# This is very important to avoid running commands on the server by accident.
setterm --inversescreen on

# This ensures we restore the console colours after exiting.
function restore_screen_colours {
  setterm --inversescreen off
}
trap restore_screen_colours EXIT

그런 다음 이것을 모든 서버에 넣었습니다. ~/.bashrc 내 터미널이 원격 서버에있을 때를 알 수 있도록 파일.

또 다른 보너스는 귀하의 개발 또는 DevOps 팀이 온 보딩 프로세스의 일부로 만들지 않고 이점을 얻는다는 것입니다.

잘 작동합니다.

사용자 이름과 호스트 머신 이름의 색상을 변경해야합니다.

다음 줄을 추가하십시오 ~/.bash_profile 파일:

export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "

그만큼 첫 번째 부분 (자주색 색)는 당신이 찾고있는 것입니다.

시사: enter image description here

이것은 내가 선호하는 색상입니다. 변경하여 프롬프트 색상의 각 부분을 사용자 정의 할 수 있습니다. m 코드 (예 : 34m) ANSI 색상 코드입니다.

ANSI 컬러 코드 목록 :

  • 검은 색 : 30m
  • 빨간색 : 31m
  • 녹색 : 32m
  • 노란색 : 33m
  • 블루 : 34m
  • 자주색 : 35m
  • 시안 : 36m
  • 흰색 : 37m
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top