(Это ответ @xzfc с некоторыми исправлениями.)
Установите ncat
на свой клиент и сервер. Потому что nc
в обычных дистрибутивах (Debian, Ubuntu) не имеет опций для выполнения команд (-c
/ -e
), которые нам нужны.
apt install nmap
На вашем локальном компьютере настройте сервер, который будет выполнять команду для воспроизведения звука при установлении соединения с ним:
ncat --sh-exec "paplay /usr/share/sounds/freedesktop/stereo/complete.oga" \
--keep-open --listen localhost 10009
Или используйте эквивалентную сокращенную команду:
ncat -klc "paplay file.oga" localhost 10009
SSH к вашему удаленному хосту таким образом, чтобы был установлен обратный туннель от порта 10008 удаленного хоста до порта 10009 на вашей локальной машине (где ваш сервер прослушивает):
ssh -R 10008:localhost:10009 me@somewhere.com
Выполните команду 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 никому не доступен в Интернете.