iterm2에서 Trigger를 이용하여 특정조건에서 profile 변경하기

맥북에서 개발 및 서비스 운영을 하다 보면 ssh를 통해서 서버에 접속 할일이 많습니다

지금 내가 접속한 환경이 운영인지 개발인지 표시를 해주시면 쉘 명령어 입력시 한번 더 주의를 할 수 있을것 같아 iTerm2에 Automatic Profile Switching 기능을 사용하고자 했습니다.

하지만 automatic profile switching 기능을 사용할려면 변경이 필요한 환경에 shell Integration 을 설치 해야 합니다 이는 인프라팀이 좋아 하지 않을 방법이라 shell Integration 설치 없이 automatic profile switching 기능을 사용 하는 방법을 서술 합니다

스크린샷

저 같은 경우 로컬PC에 사용자명을 출력하지 않아 어쩔 수 없이 로컬 환경만 shell Integration을 설치 했습니다

저와 같이 zsh 쉘 환경에 사용자 명을 출력하지 않을 경우를 기준으로 설명합니다

trigger를 사용하여 Profile Switching 하기

  1. iTerm2 install shell Integration
    1. iTerm2 → Install shell Integration → continue → Download and Run Installer → continue → 아래 명령어를 통해 설치 확인
     vi ~/.zshrc
    
     # 아래 항목이 추가 되었으면 정상 설치 안되어 있을 경우 추가
     test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
    
  2. default profile 설정
    1. iTerm2 → Preferences → Profiles → Default 선택 (혹은 자신이 기본으로 사용하는 profile 선택)
    2. General → Badge → 로컬 환경일때 표시 하고 싶은 text 설정
    3. Badge 텍스트 위치 필요시 Edit 눌러서 표시 크기 및 위치 조정
    4. Badge 텍스트 색 변경 필요시 Colors → Badge 항목에 원하는 색으로 변경
    5. Advanced → Triggers → Edit → + 버튼 클릭 → Action 항목 Report User & Host 선택 → Reqular Expression → 아래 케이스 참고하여 정규식 입력 → Parameters → \1@\2
     # case1
     test@product-elasticsearch-2c → (\w+)@([\w.-]+)
    
     # case2
     [test@elasticsearch-product-2 ~] → (?!\[)(\w+)@([\w.-]+)
    
     # 기타 형식일 경우 https://regexr.com 에서 작성하고 테스트 해야 함
    
  3. ssh 접속 환경 별 profile 설정 (product 일 경우)
    1. iTerm2 → Preferences → Profiles → Default 선택 → Other Actions → Duplicate Profile
    2. Name을 자신이 원하는 이름으로 변경 ex) product
    3. Badge → \(session.username)@\(session.hostname) 입력
    4. Advanced → Automatic Profile Switching → ssh 접속시 console에 출력되는 username@hostname 규격 입력
    # case 1
    test@product-elasticsearch-2c → test@product-*
       
    # case 2
    test@elasticsearch-product-2 → test@*product*
    
    # 호스트명에 운영/개발 환경을 구분 할 수 있는 단어를 픽할 수 있어야 profile swithching이 가능 하다
    

원리 설명

iTerm2 에서 default profile에 설정된 정규식으로 사용자명 / 호스트명 이 인자값으로 뽑히는데 여기에 Automatic Profile Switching에 설정된 규격에 맞을경우 해당 profile로 전환 하는 것 입니다

또한 다시 default으로 전환되는건 세션이 끊기고 로컬PC에 설치된 shell Integration이 자동으로 default 프로필로 변경 해주기 때문에 별도의 Automatic Profile Switching 항목이 없어서 자동 전환 되는 것 입니다

아쉽게도 이 방법은 접속하는 서버의 호스트명에 해당 환경을 구분 할 수 있는 prefix가 있어야지 가능한 방법이며 공통적인 prefix가 없는 경우 해당하는 호스트명을 Automatic Profile Switching 에 등록 해줘야 합니다

한가지 더 팁을 드리자면 개인개정으로 접속 후 root 으로 전환시 profile이 풀리는 현상이 나타날 수 있는데 이는 Automatic Profile Switching 항목에 root 으로 개인계정과 같은 형식으로 등록 해주면 해결 됩니다