내 직업에서는 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}"; }