Evitar que o tmux inicie no SSH

4

Gostaria que tmux criasse uma nova janela quando eu ssh em uma máquina a partir de uma sessão tmux existente. No entanto, eu não quero uma sessão do tmux iniciada na nova máquina!

Eu tenho o seguinte no meu .bashrc , para que tmux inicie automaticamente:

if [[ "$TERM" != "screen" ]]
then
   # try to attach to existing session, or start a new one
   tmux attach-session -t "$USER" || tmux -2 new-session -s "$USER"
   exit
fi

Eu também tenho uma função ssh :

alias ssh='ssh_func'
ssh_func (){
    if [[ "$TERM" == "screen" ]]; then
        tmux new-window -n "$1" "ssh $@";
    else
        /usr/bin/ssh "$@";
    fi
}

Isso funciona ok, mas eu não quero uma sessão tmux iniciada na máquina que eu ssh, porque isso me dá duas sessões na mesma janela de terminal. Existe algo que eu possa colocar no meu .bashrc para que o tmux não inicie em uma máquina se o comando ssh tiver sido invocado a partir de uma sessão do tmux?

Estou usando o PuTTY e o tmux 1.5.

    
por dogbane 19.08.2011 / 11:38

2 respostas

1

Dado o código que você postou, se você executar ssh a partir do tmux, você terá $TERM = screen , então você não estará tentando se conectar a uma janela do tmux. Em outras palavras, o código que você já tem deve funcionar como desejado. Há algo suspeito acontecendo. Certifique-se de que seus arquivos dot não atrapalhem a variável TERM (se você precisar modificar TERM , o que é muito raro, certifique-se de fazê-lo apenas em circunstâncias muito específicas; em particular, não altere se for screen ).

    
por 21.08.2011 / 03:19
1

Você pode testar a presença da variável de ambiente SSH_CONNECTION : se essa variável for definida, o shell foi iniciado a partir do SSH. Por exemplo:

if [ -n "$SSH_CONNECTION" ]; then
  # running within SSH session, do not start tmux
  ...
else
  # logged in from console/terminal, start tmux
  tmux ...
fi

A variável contém quatro valores separados por espaço: endereço IP do cliente, número da porta do cliente, endereço IP do servidor e número da porta do servidor. Você pode usar isso para uma correspondência mais complexa, por exemplo:

case "$SSH_CONNECTION" in
  client.ip.v4.addr*)
   # client is client.ip.v4.addr != this host's addr
   echo "you're connecting from a remote host, starting tmux"
   tmux ...
   ;;
  *server.ip.v4.addr)
   # if server.ip.v4.addr == this hosts' address, then SSH_CONNECTION
   # is not inherited from another connection
   echo "SSH_CNNECTION is not stale"
   ;;
  '') 
   # no SSH_CONNECTION at all
   ;;
esac

Mais detalhes sobre a variável de ambiente SSH_CONNECTION no "AMBIENTE" seção da ssh (1) manpage .

    
por 19.08.2011 / 14:08

Tags