Этот вопрос имеет прямое отношение к этому: ssh не может выполнить удаленную команду при запуске из cron bash скрипта - работает из CLI
Я не могу комментировать принятый ответ, так как у меня недостаточно репутации, поэтому, пожалуйста, терпите меня.
Я запускаю сценарий на компьютере с Linux, и хост, с которого я пытаюсь получить выходные данные, - это маршрутизатор с его ОС, поэтому я ни на что не могу повлиять с точки зрения настройки консоли. В основном это выполняется под cron: OUT=$(ssh -tt -vv user@host.com "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 я получаю ожидаемый результат. Как видите, опция -tt для принудительного выделения псевдо-tty не помогает.
Какие-либо решения для этого, чтобы помочь cron преодолеть глючную удаленную консоль?
Ваша команда печатает результаты stderr или stdout?
Вы можете изменить маршрут stderr
к stdout
с помощью
OUT=$(ssh -tt -vv user@host.com "remote command" 2>&1 )
Вы рассматривали возможность использования полностью определенных путей для задания cron?
Использовать /usr/bin/ssh user@host
вместо того ssh user@host
Некоторые маршрутизаторы или встроенные устройства имеют очень плохую реализацию SSH. Я видел случаи, когда они знают только, как читать команды с консоли, и не могут работать с командами, переданными в командной строке. Если это так, вы можете попробовать передать удаленную команду в удаленный ssh.
echo remote command | ssh user@host
Если это поможет, возможно, вам повезет, если вы попытаетесь что-то написать с помощью expect
.