Descobri que simplesmente usar -t -t
como um argumento para ssh
fez com que funcionasse. Não precisei definir huponexit
para o shell de origem ou remoto.
Eu testei isso da seguinte forma:
Não funciona:
ssh user@remote sleep 100
^C
Isso matou a sessão ssh, mas posso ver que o processo de suspensão ainda está sendo executado no host remoto ( ps -ef | grep sleep
mostra isso).
funciona:
ssh -t -t user@remote sleep 100
^C
Isso mata a sessão ssh e o processo de suspensão remota também foi eliminado. Eu também verifiquei que o sinal que é enviado para o processo remoto é SIGINT
se você usar Controle - C . Também verifiquei que SIGKILL (-9) aplicado ao processo ssh
também matará o processo remoto.
EDIT 1:
Isso era verdadeiro para sleep
... para processos remotos mais teimosos, descobri que ssh
manipula ^ C diferentemente que SIGINT. Ctrl - C funcionou, mas kill -INT $pid
didn'.t
Aqui está o que eu finalmente criei que funcionou para minha aplicação real (roubar as outras respostas).
ssh -t -t -i id_rsa user@mic0 "/bin/sh -O huponexit -c 'sleep 100'"
Observe o uso aninhado de aspas duplas e aspas simples. Note que o seu processo remoto DEVE responder ao SIGHUP ao realmente sair!