Tocando som no computador local após o comando na conexão SSH


4

Estou em uma sshconexão e gostaria de tocar um som após a conclusão de um comando (não no servidor em que me conectei).

Alguma coisa:

ssh me@somewhere.com
make && play-sound-local

Eu tenho o alto-falante do PC desativado, então echo -e "\a"não funciona.

Alguma sugestão?


Respostas:


1

Você pode configurar o PulseAudio para permitir conexões de rede e, em seguida, usar o encaminhamento de porta ssh e paplay -sno lado remoto para enviar o áudio de volta através da conexão ssh. Observe que o áudio pode sofrer um atraso ou interrupção com base na fidelidade do áudio e na velocidade da conexão.


1

Configure o servidor primitivo (por exemplo, na porta 1234) que reproduz som no computador local quando alguém se conectar e encaminhe essa porta ao servidor remoto.

Na máquina local:

nc -l -p 1234 -e "mplayer sound.ogg"

então

ssh -L 1234:localhost:12345 me@somewhere.com
make && nc localhost 12345

PS: você deve usar, em ;vez de, &&se quiser ser notificado, mesmo quando o make falhou.


1

(Esta é a resposta do @xzfc com algumas correções.)

  1. Instale ncatna sua máquina cliente e servidor. Porque ncnas distribuições usuais (Debian, Ubuntu) não tem as opções para executar comandos ( -c/ -e) que precisamos.

    apt install nmap
    
  2. Na sua máquina local, configure um servidor que execute um comando para reproduzir um som quando uma conexão for estabelecida com ele:

    ncat --sh-exec "paplay /usr/share/sounds/freedesktop/stereo/complete.oga" \
      --keep-open --listen localhost 10009
    

    Ou use o comando abreviado equivalente:

    ncat -klc "paplay file.oga" localhost 10009
    
  3. SSH no host remoto de maneira que um túnel reverso seja estabelecido da porta 10008 do host remoto para a porta 10009 na sua máquina local (onde o servidor está escutando):

    ssh -R 10008:localhost:10009 me@somewhere.com
    
  4. Execute seu makecomando da seguinte maneira no shell SSH:

    make; ncat --idle-timeout 1s localhost 10008
    

Como funciona

Após o makecomando (com êxito ou não), o ncatcomando estabelece uma conexão com a porta 10008 no host remoto, que o SSH encaminha para a porta 10009 em sua máquina local, onde o servidor escuta e emite um som quando a conexão é feita. Depois que a conexão foi estabelecida, não precisamos mais dela e, portanto, é fechada depois --idle-timeout 1s. Isso mostrará o prompt do shell novamente em vez de um ncatcomando "travado" , tornando aparente que sua cadeia de comandos SSH realmente terminou.

O encapsulamento reverso SSH faz esse trabalho, apesar de qualquer roteador / firewall / NAT entre sua máquina local e a máquina remota. (Caso contrário, você teria que configurar regras de encaminhamento de porta no seu roteador ou expor uma máquina local à Internet.)

Segurança

Fazemos ncat -l localhost 10009pelo servidor, o que significa que ele escuta apenas na interface de rede com o endereço IP do host local. Essa interface de loop local permite apenas conexões de sua própria máquina (incluindo, nesse caso, aquelas com túnel reverso via SSH). Portanto, mesmo se você não estiver protegido por um firewall, sua porta 10009 não estará exposta a ninguém na Internet.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.