공유 SSH 세션 감지

공유 SSH 세션 감지

내 직업에서는 SSH를 통해 다양한 컴퓨터에 연결해야 합니다. 생활을 더 편리하게 하기 위해, 내가 어떤 기계를 사용하고 있는지 한눈에 알 수 있도록 각 기계의 색 구성표를 자동으로 설정하려고 노력해 왔습니다.

이것은거의피복재.

~/.ssh/config:

Host some-remote-server
    Hostname some-remote-server.ac.uk
    User myusername
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes
    ForwardX11 yes

Host some-other-remote-server
    Hostname some-other-remote-server.ac.uk
    User myusername
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes
    ForwardX11 yes
    ProxyCommand ssh -Y some-remote-server -W %h:%p
    ControlMaster auto
    ControlPath /tmp/ssh-socket-%r@%h-%p
    ControlPersist 600

"some-remote-server"와 "some-other-remote-server"를 모두 파란색으로 설정하고 "my-local-server"는 빨간색으로 설정하고 싶다고 가정해 보겠습니다.

로그인에는 문제가 없습니다. "~/.profile"에 색 구성표를 적절하게 설정하는 코드가 있습니다. 그런데 로그아웃이 문제네요.

~/.bash_logout:

if [[ $- == *i* ]]; then
  ORIGIN_HOST=`who am i | awk -F"[()]" '{print $2}'`
  $HOME/bin/set_the_colorscheme $ORIGIN_HOST
fi

my-local-server에서 some-other-remote-server로 ssh 세션을 종료하면 위 스크립트는 $ORIGIN_HOST를 "some-remote-server"(b/ 내 SSH 구성 파일 c의 ControlMaster 설정)로 식별합니다. 색상은 파란색으로 유지됩니다.

ControlMaster를 사용하고 있는지 감지하고 원래 ssh 명령을 실행한 호스트를 찾을 수 있는 방법이 있습니까?

감사해요.

답변1

실제 목표는 SSH 세션을 종료한 후 터미널 설정을 복원하는 것 같습니다. 이는 이전 솔루션과 약간 다른 솔루션입니다. 다른 게시물을 기반으로 한 솔루션은 다음과 같습니다.

SSH 세션이 종료된 후 일부 코드를 실행하도록 래퍼/심 함수를 정의할 수 있습니다.

function ssh () { command ssh "$@"; echo "SSH session terminated!"; }

이 래퍼를 사용하면 현재 호스트를 기반으로 터미널 환경을 재설정할 수 있습니다. 특히 다음을 수행할 수 있습니다.

$ mkdir -p ~/.ssh/exit_scripts

$ cat <<HEREDOC > "${HOME}/.ssh/exit_scripts/${HOSTNAME}"
# Host-specific script goes here
echo "I'm on $(hostname)"
HEREDOC

$ function ssh () { command ssh "$@"; source "${HOME}/.ssh/exit_scripts/${HOSTNAME}"; }

관련 정보