通过 ssh 的透明信号

通过 ssh 的透明信号

我所说的透明是指转发:

  • stdinstdoutstderr
  • 标准信号(SIGHUP或者SIGINT非常适合作为开始信号)

作为示例,考虑这些(无意义的)本地和远程命令的调用:

$ `cat - > /dev/null; sleep 10` < /local/file
$ ssh user@host "cat - > /dev/null; sleep 10" < /local/file

我可以用 中断第一个命令^C,但是如果我在第二个命令期间尝试中断它,则只会影响,如果已经完成,则ssh命令仍会在远程服务器上运行。cat

我知道ssh使用启动-t,但这样我就无法通过 发送数据stdinssh单独使用 是否可行?

答案1

信号是本地内核的领域;它们永远不会通过网络链路传输。

虽然您可以从本地计算机在远程 ssh 会话中运行命令,但这并不会神奇地使远程计算机上的系统级事件在本地可用。

您必须将整个过程包装在一个脚本中,该脚本可以捕获所有(可能的)信号并通过 ssh 连接将这些信号传回,但即便如此,它们也不会神奇地再次变成信号。

也许涉及某些内容nc可能更适合改组 std{in|out|err};这也不是 ssh 工具集的一部分。

相关内容