detectando uma sessão ssh compartilhada

1

No meu trabalho, tenho que usar ssh em várias máquinas diferentes. Para tornar minha vida mais fácil, tenho tentado definir o esquema de cores de cada máquina automaticamente para que eu possa ver rapidamente qual delas eu estou trabalhando.

Está quase funcionando.

~ / .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

Vamos fingir que quero que tanto "some-remote-server" quanto "some-other-remote-server" sejam azuis e eu quero que "my-local-server" fique vermelho.

Fazer o login não é problema; existe algum código em "~ / .profile" que define o esquema de cores apropriadamente. No entanto, sair é problemático.

~ / .bash_logout:

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

Quando eu saio de uma sessão ssh do meu-servidor-local para outro-servidor-remoto, o script acima identifica $ ORIGIN_HOST como "algum-servidor-remoto" (b / c da configuração do ControlMaster na minha configuração SSH arquivo) e assim as cores ficam azuis.

Existe alguma maneira de detectar que estou usando o ControlMaster e encontrar o host que emitiu o comando ssh original?

Obrigado.

    
por trubliphone 25.10.2017 / 15:46

1 resposta

0

Parece que seu objetivo real é restaurar as configurações do terminal depois de encerrar uma sessão SSH. Aqui está uma solução que segue um caminho ligeiramente diferente daquele em que você estava. Isso é baseado em soluções de outros posts:

Você pode definir uma função wrapper / shim para executar algum código após o término da sessão SSH:

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

Usando este wrapper, você pode redefinir seu ambiente de terminal com base no host atual. Em particular, você poderia fazer algo como o seguinte:

$ 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}"; }
    
por 25.10.2017 / 20:52

Tags