3

Я нахожусь в соединении ssh и я хотел бы воспроизвести звук после завершения команды (не на сервере, к которому я подключился).

Что-то:

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

Я отключил встроенный динамик компьютера, поэтому echo -e "\a" не работает.

Какие-либо предложения?

3 ответа3

1

Вы можете настроить PulseAudio для разрешения сетевых подключений, а затем использовать переадресацию порта ssh и paplay -s на удаленной стороне для отправки звука обратно через соединение ssh. Обратите внимание, что звук может быть задержан или заикаться в зависимости от качества звука и скорости соединения.

1

(Это ответ @xzfc с некоторыми исправлениями.)

  1. Установите ncat на свой клиент и сервер. Потому что nc в обычных дистрибутивах (Debian, Ubuntu) не имеет опций для выполнения команд (-c / -e), которые нам нужны.

    apt install nmap
    
  2. На вашем локальном компьютере настройте сервер, который будет выполнять команду для воспроизведения звука при установлении соединения с ним:

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

    Или используйте эквивалентную сокращенную команду:

    ncat -klc "paplay file.oga" localhost 10009
    
  3. SSH к вашему удаленному хосту таким образом, чтобы был установлен обратный туннель от порта 10008 удаленного хоста до порта 10009 на вашей локальной машине (где ваш сервер прослушивает):

    ssh -R 10008:localhost:10009 me@somewhere.com
    
  4. Выполните команду make следующим образом в оболочке SSH:

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

Как это устроено

После команды make (успешной или нет) команда ncat устанавливает соединение с портом 10008 на удаленном хосте, который SSH перенаправляет на порт 10009 на вашей локальной машине, где ваш сервер прослушивает и воспроизводит звук при установлении соединения. , После того, как соединение установлено, оно нам больше не нужно, поэтому оно закрывается после --idle-timeout 1s . Это покажет приглашение оболочки снова вместо " зависшей" команды ncat , и станет ясно, что ваша цепочка команд SSH действительно завершена.

Обратное туннелирование SSH делает эту работу, несмотря на любые маршрутизаторы / межсетевые экраны / NAT между вашей локальной машиной и удаленной машиной. (В противном случае вам придется настроить правила переадресации портов на маршрутизаторе или подключить локальный компьютер к Интернету.)

Безопасность

Мы делаем ncat -l localhost 10009 для сервера, что означает, что он прослушивает только сетевой интерфейс с IP-адресом локального хоста. Этот локальный интерфейс петли разрешает соединения только с вашей собственной машины (включая, в данном случае, те, которые обратно транслированы через SSH). Таким образом, даже если вы не находитесь за брандмауэром, ваш порт 10009 никому не доступен в Интернете.

1

Настройте примитивный сервер (например, на порт 1234), который воспроизводит звук на локальном компьютере при подключении, и перенаправьте этот порт на удаленный сервер.

На локальной машине:

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

затем

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

PS: вы должны использовать ; вместо && если вы хотите получать уведомления, даже если make потерпел неудачу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .