我所说的透明是指转发:
stdin
,stdout
和stderr
- 标准信号(
SIGHUP
或者SIGINT
非常适合作为开始信号)
作为示例,考虑这些(无意义的)本地和远程命令的调用:
$ `cat - > /dev/null; sleep 10` < /local/file
$ ssh user@host "cat - > /dev/null; sleep 10" < /local/file
我可以用 中断第一个命令^C
,但是如果我在第二个命令期间尝试中断它,则只会影响,如果已经完成,则ssh
命令仍会在远程服务器上运行。cat
我知道ssh
使用启动-t
,但这样我就无法通过 发送数据stdin
。ssh
单独使用 是否可行?
答案1
信号是本地内核的领域;它们永远不会通过网络链路传输。
虽然您可以从本地计算机在远程 ssh 会话中运行命令,但这并不会神奇地使远程计算机上的系统级事件在本地可用。
您必须将整个过程包装在一个脚本中,该脚本可以捕获所有(可能的)信号并通过 ssh 连接将这些信号传回,但即便如此,它们也不会神奇地再次变成信号。
也许涉及某些内容nc
可能更适合改组 std{in|out|err};这也不是 ssh 工具集的一部分。