ssh ncat mantém o processo ncat em execução após a desconexão; como faço para evitar isso?

2

Se eu executar o comando

$ ssh othermachine ncat localhost 10000

que abre uma sessão ssh para "othermachine" e a canaliza para um processo ncat . (Há outra coisa ouvindo na porta "othermachine" 10000).

Agora, se eu desconectar a sessão ssh (com Ctrl + C ), o processo ncat em "othermachine" continuará em execução. Como evito isso? Eu quero que ncat morra se o seu pai ssh sair.

    
por JanKanis 12.12.2013 / 13:29

4 respostas

2

Tecnicamente, quando você ssh para "othermachine", está executando ncat localhost 10000 remotamente em "othermachine". Não há tubulação acontecendo aqui.

Quanto a outra coisa, "ouvir", não acredito que exista nada. Em vez disso, você está executando ncat localhost 10000 tentando se conectar a algo que está escutando na porta 10000 e não há nada lá.

Exemplo

$ ncat localhost 10000
Ncat: Connection refused.

Se você disser ncat para ouvir, ele permanecerá aberto.

$ ncat localhost -l 10000

Juntando isso, seu comando funciona como está, com a adição da opção -l .

$ ssh othermachine ncat localhost -l 10000

ncat continua a rodar?

Depois de executar um Ctrl + C ncat localhost -l 10000 também continua sendo executado no servidor remoto para mim também.

Para interromper esse comportamento, você poderia encapsular a chamada para "othermachine" dentro de um shell, como sh .

Exemplo

$ ssh othermachine -t 'sh -c "ncat localhost -l 10000"'
...stays up...

Agora, em outro shell, se eu fizer login em "othermachine" e confirmar que ele está em execução:

$ pgrep -l ncat
8479 ncat

Se eu Ctrl + C , o original ssh connection ncat também pára de funcionar.

$ ssh othermachine -t 'sh -c "ncat localhost -l 10000"'
Ctrl + C
Shared connection to othermachine closed.

Confirmando que desapareceu:

$ pgrep -l ncat
$

Por que isso funciona?

A peça chave nessa configuração é a opção -t . Isso força a conexão a configurar um terminal pseudo-tty (ptty) como parte da conexão.

trecho da página man do ssh

 -t     Force pseudo-tty allocation.  This can be used to execute arbitrary
        screen-based programs on a remote machine, which can be very useful,
        e.g. when implementing menu services.  Multiple -t options force tty 
        allocation, even if ssh has no local tty.

Este ptty nos permite enviar a Ctrl + C até ncat , que é então finalizado, resultando no fechamento da conexão ssh inteiramente. / p>

Referências

por 12.12.2013 / 14:23
1

Analise rapidamente man ssh

If command is specified, it is executed on the remote host instead of a login shell.

Esta pode ser a causa da continuação da execução após SIGTERM/SIGKILL . Se você quiser forçar um login no shell, precisará fazer algo como:

ssh othermachine -t 'bash -l -c "ncat localhost 10000"'
    
por 12.12.2013 / 13:49
0
A resposta do nwildner funciona, mas a única coisa que me preocupa é que o switch -t atribua um pseudo-tty, e isso poderia resultar em seqüências de escape de terminal que não passam de forma limpa? No caso de encaminhamento com ncat , uma solução melhor para o meu caso é usar

ssh othermachine -W localhost:10000

qual é o caminho nativo do ssh para encaminhar a conexão.

    
por 12.12.2013 / 14:42
0

Outra resposta a essa pergunta é usar nc em vez de ncat . Geralmente tem a mesma funcionalidade. Se o stdin do ncat estiver fechado, o ncat não fecha sua extremidade da conexão tcp, enquanto o nc fecha.

    
por 30.01.2014 / 22:07

Tags