У меня проблема с запуском ssh из crontab для устройства хранения Fujitsu DX200.
При запуске команды из терминала все работает нормально, подключаясь с использованием ключей RSA, но когда я встраиваю команду в сценарий и запускаю ее из cron, происходит сбой: «Псевдо-терминал не будет выделен, потому что stdin не является терминалом».
Команда: ssh user@dx200 "show performance -type host-io"
Согласно многим статьям в сети, добавление числа -t
в качестве аргумента для ssh должно привести к принудительному выделению PTY. В RedHat, где был разработан скрипт, он работает путем добавления -t -t -t
(или -ttt
), но это не так при работе в Ubuntu.
Использование ssh -T (Отключить псевдо-tty выделение) приводит к сбою входа в dx200 с помощью «FUJITSU Storage ETERNUS требуется вход в систему ...» - то есть, не входя в систему с ключом RSA.
Другие решения из сети, использующие варианты ssh ... /bin/bash <<EOF ...
, невозможны, потому что мы не можем запустить оболочку на устройстве хранения.
Есть идеи, как обойти эту проблему?
Ответ на мой собственный вопрос...
Добавление дополнительного -t
аргумент ssh решил проблему.
Команда теперь похожа ssh -t -t -t -t user@dx200 ......
( -tttt
должен сделать то же).
Страница справочника на ssh say's это о-t:
-t Force pseudo-tty allocation. This can be used to execute arbi-
trary screen-based programs on a remote machine, which can be
very useful, e.g. when implementing menu services. Multiple -t
options force tty allocation, even if ssh has no local tty.
Но ничто о том, сколько 'Несколько', или что в коде ssh, который управляет количеством -t
опции требуются.