在 SSH 连接中执行命令后在本地计算机上播放声音

在 SSH 连接中执行命令后在本地计算机上播放声音

我处于ssh连接状态,我想在命令完成后播放声音(不是在我连接的服务器上)。

某物:

ssh [email protected]
make && play-sound-local

我已禁用内置电脑扬声器,因此echo -e "\a"无法工作。

有什么建议么?

答案1

您可以配置 PulseAudio 以允许网络连接,然后使用 ssh 端口转发并paplay -s在远程端通过 ssh 连接发回音频。请注意,音频可能会根据音频的保真度和连接速度而延迟或断断续续。

答案2

设置原始服务器(例如,在端口 1234 上),当有人连接时在本地计算机上播放声音,并将该端口转发到远程服务器。

在本地机器上:

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

然后

ssh -L 1234:localhost:12345 [email protected]
make && nc localhost 12345

PS:如果您想在 make 失败时收到通知,则应该使用;而不是。&&

答案3

(这是@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 [email protected]
    
  4. 在 SSH shell 中执行make以下命令:

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

怎么运行的

执行完该make命令后(无论成功与否),该ncat命令都会与远程主机上的端口 10008 建立连接,SSH 会将该连接转发到本地计算机的端口 10009,服务器会在此监听并在连接建立时播放声音。建立连接后,我们不再需要它,因此会在 之后关闭它--idle-timeout 1s。这将再次显示 shell 提示符,而不是“挂起”ncat命令,从而表明您的 SSH 命令链确实已完成。

SSH 反向隧道使此功能即使在本地计算机和远程计算机之间有任何路由器 / 防火墙 / NAT 的情况下也能正常工作。(否则,您必须在路由器中设置端口转发规则,或将本地计算机暴露在互联网上。)

安全

我们ncat -l localhost 10009对服务器进行了限制,这意味着它只监听具有本地主机 IP 地址的网络接口。此本地环路接口仅允许来自您自己的计算机的连接(在本例中包括通过 SSH 反向隧道接入的连接)。因此,即使您没有防火墙,您的端口 10009 也不会暴露给互联网上的任何人。

相关内容