É possível enviar um sinal SIGTERM (ou outro) para um processo dentro do ssh, por exemplo:
ssh hostname 'sleep 10; echo done'
O que posso fazer para interromper o comando sleep? Se eu pressionar ctrl-c, o comando ssh será interrompido.
Responder1
É possível propagar ctrl+c
para o processo remoto implementando um conversor "EOF para SIGHUP" através de um pipe nomeado no host remoto (consulte:O comando ssh continua inesperadamente em outro sistema após o término do ssh).
ssh localhost '
TUBE=/tmp/myfifo.fifo
rm -f "$TUBE"
mkfifo "$TUBE"
<"$TUBE" sleep 100 & appPID=$!
dd of="$TUBE" bs=1 2>/dev/null
kill $appPID
#kill -TERM -- -$$ # kill entire process group
rm -f "$TUBE"
'
Responder2
-t pode fazer o que quiser (vejahttps://superuser.com/a/20708/36198). Infelizmente, se você quiser ler stdin também, você precisará fazer isso em duas etapas, tendo apenas Ctrl+C para a segunda, por exemplo
tmp=$(bzcat foo.bz2 | ssh $user@$host '
t=$(mktemp -t foo.XXXXXXXXXXX);
cat >"$t";
echo "$t";
')
ssh -t $user@$host "./cmd \"$tmp\""
ssh $user@$host "rm -f \"$tmp\""
Responder3
Se você conhecesse o pid do processo remoto, poderia fazer:ssh hostname 'kill -TERM $pid'