Mate o SSH em segundo plano quando a shell sai

5

Estou tentando gerar um SSH do meu script de perfil bash que é executado em segundo plano para o compartilhamento de conexão (por meio de seu soquete de controle). O problema que estou encontrando é uma maneira confiável de garantir que o SSH não permaneça em execução assim que o TTY for fechado (ou mais diretamente; uma vez que o shell bash pai tenha saído).

Eu sei que o shell pode executar comandos (para encerrar o SSH) quando ele sai normalmente, mas estou tentando lidar com todos os cenários possíveis em que o shell não tem a chance de fechar as coisas.

Existe uma maneira inteligente de fazer isso?

A melhor ideia que tive é

ssh -o PermitLocalCommand=yes -o LocalCommand='cat >/dev/null; kill $PPID' $HOST &

Mas isso não funcionará porque eu preciso do comando para fazer o background apenas quando ele for iniciado com sucesso. Como alternativa, não posso usar -fN em vez do & do shell, porque os fundos do SSH -f somente depois que o LocalCommand foi concluído.

Além disso, estou tentando evitar a execução de qualquer comando no host remoto. Caso contrário, eu provavelmente poderia fazer algo como ssh -fN $HOST 'cat >/dev/null'

    
por Patrick 12.03.2012 / 15:54

3 respostas

3

Eu odeio quando respondo a minha própria pergunta.

A solução que obtive foi usar ControlPersist=3600 ao iniciar o processo mestre ssh. Desta forma, se o shell não sair de forma graciosa e matar o ssh, ele se desligará após uma hora de inatividade. Embora eu ainda use uma armadilha na saída para fechar o SSH de forma limpa.

ssh -o ControlMaster=yes -o ControlPersist=3600 -o ControlPath=/tmp/ssh-%u-%h-%p-%r -Nf $HOST
trap "ssh -o ControlPath=/tmp/ssh-%u-%h-%p-%r $HOST -O exit" exit
    
por 13.03.2012 / 05:09
3

Se o seu shell é um shell de login, você pode parar a conexão mestre SSH do arquivo ~ / .bash_logout:

ssh -O exit hostname

Se o shell não for um shell de login, você pode definir um trap em seu arquivo ~ / .bashrc logo após gerar o SSH:

ssh -fN hostname
trap 'ssh -O exit hostname' EXIT
    
por 12.03.2012 / 20:12
-3

Mantenha as sessões do SSH em funcionamento após a desconexão

Eu não sei se é isso que você está procurando, mas isso me ajudou a manter meu programa em execução depois de sair do shell ssh.

    
por 12.03.2012 / 17:16

Tags