在 CRON 中通过 SSH 捕获远程执行命令的输出失败

在 CRON 中通过 SSH 捕获远程执行命令的输出失败

这个问题与这个问题直接相关:从 cron bash 脚本运行时 ssh 无法执行远程命令 - 从 CLI 运行

由于我没有足够的代表,我无法对接受的答案发表评论,所以请耐心等待。

我在 Linux PC 机器上运行脚本,我试图从中获取输出的主机是带有操作系统的路由器,因此我无法影响控制台的配置。基本上在 cron 下执行此操作会得到一个空变量。OUT=$(ssh -tt -vv [email protected] "remote command")

debug1: Sending command: remote command
debug2: channel 0: request exec confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 2621440 rmax 262144
debug2: channel 0: read<=0 rfd 4 len 0
debug2: channel 0: read failed

如果我在 cron 之外执行此操作,即在 CLI 中,我会获得预期的输出。如您所见,强制分配伪 tty 的 -tt 选项没有帮助。

有什么解决方案可以帮助 cron 克服有问题的远程控制台吗?

答案1

您的命令打印结果 stderr 还是 stdout?

您可以重新路由stderrstdout使用

OUT=$(ssh -tt -vv [email protected] "remote command" 2>&1 )

答案2

您是否考虑过对 cronjob 使用完全限定路径?

使用/usr/bin/ssh user@host而不是ssh user@host

答案3

一些路由器或嵌入式设备的 SSH 实现非常糟糕。我见过一些情况,它们只知道如何从控制台读取命令,而无法处理在命令行上传递的命令。如果您遇到这种情况,您可能需要尝试将远程命令通过管道传输到远程 ssh。

echo remote command | ssh user@host

如果这有帮助的话,那么您可能更幸运地尝试使用 编写一些代码 expect

相关内容