Se você tiver um servidor OpenSSH em execução no cliente, poderá configurá-lo para forçar um determinado comando a ser executado para uma chave específica. Se feito corretamente, esta chave só pode ser usada para acionar esta notificação e não para qualquer coisa significativamente nefasta.
Para tornar as coisas menos confusas (porque neste caso temos a ação de ambos os lados, cliente ou servidor) eu chamarei a máquina local, ou seja, o cliente conectado ao servidor remoto para iniciar a tarefa de longa duração, Alice . Bob será então o servidor onde iniciar a tarefa de compilação, na qual deverá então notificar Alice sobre a conclusão da tarefa.
Para isso, basicamente basta gerar uma chave usando ssh-keygen -f notif_key
e, em seguida, adicionar a chave pública ( notif_key.pub
) a uma linha separada na .ssh/authorized_keys
de Alice, mas prefixada com:
command="/path/to/notifier.sh \"$SSH_ORIGINAL_COMMAND\"",no-port-forwarding,no-x11-forwarding,no-agent-forwarding ssh-rsa …
( ssh-rsa …
significa a chave pública.)
notifier.sh
é um script no lado de Alice, que então chama o comando de notificação (é claro que você pode começar imediatamente, se possível, apenas observe que toda a linha é executada em um shell).
Do lado de Bob, você pode acionar a notificação no lado de Alice usando ssh
, então, tudo isso é executado no Bob dentro da sessão tmux
:
time-consuming-command; ssh -i notif_key user@alice_pc foobar
E é isso!
BTW, $SSH_ORIGINAL_COMMAND
é um espaço reservado para toda a linha de comando extra para o comando ssh
que, em seguida, é encaminhado para o comando forçado. Dessa forma, você pode personalizar a notificação específica do Bob, por exemplo para quando você executar várias tarefas dessa maneira ao mesmo tempo.
Exemplo notifier.sh
com isso em mente:
#!/bin/sh
some-notification-command --message "Task '$*' is done!"
echo 'Note to Bob: Alice has been notified.'
Em suma, esta solução está longe de ser ideal. Ele requer um servidor OpenSSH no cliente e é um pouco incômodo de configurar. Espero que existam melhores soluções.