这个问题与这个问题有直接的关系: 当从cron bash脚本运行时,ssh无法执行远程命令 – 从CLI
我无法评论接受的答案,因为我没有足够的代表,所以请耐心等待。
我正在一台Linux PC机上运行一个脚本,而我试图从中获取输出的主机是一台带有操作系统的路由器,所以在configuration控制台方面我没什么影响。 基本上在cron下执行: OUT=$(ssh -tt -vv [email protected] "remote command")给我一个空variables。
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中,我得到了预期的输出。 正如你所看到的-tt选项强制伪tty分配没有帮助。
任何解决scheme,以帮助cron克服越野车远程控制台?
你的命令打印结果stderr或stdout?
您可以使用stderr重新路由stderr stdout
OUT=$(ssh -tt -vv [email protected] "remote command" 2>&1 )
你有没有考虑使用cronjob完全合格的path?
使用/usr/bin/ssh user@host而不是ssh user@host
某些路由器或embedded式设备的SSH实施非常糟糕。 我已经看过他们只知道如何从控制台读取命令的情况,并且不能处理在命令行上传递的命令。 如果是这种情况,您可能需要尝试将远程命令传输到远程ssh中。
echo remote command | ssh user@host
如果这有帮助,你可能有更好的运气,试图编码与expect东西。