CentOS 5.4
(в моем файле скрипта - script.sh)
#!/bin/bash
ssh 192.168.0.1 'iptables -L' > /tmp;
(в / etc / crontab)
30 21 30 9 * root /bin/bash /script.sh
Если я запускаю скрипт в терминале, все работает нормально. Но используйте crontab для его запуска, tmp будет сгенерирован, но в файле tmp ничего нет (0k). Я уже запустил агент ssh, поэтому ssh не запрашивает пароль. В чем может быть проблема? Спасибо.
Я предлагаю вам всегда явно указывать все необходимые переменные в начале скриптов.
PATH=/bin:/usr/bin:/sbin
MYVAR=whatever
Тем не менее, я бы
Теперь попробуйте соединение с
#!/bin/bash
PATH=/usr/bin
ssh -i /myprivatekey -l root 192.168.0.1 '/sbin/iptables -L' > /tmp/output.$$
Изменить: я догадывался, что команда «iptables» должна выполняться пользователем root на удаленном сервере. Если это не так, конечно, параметр «-l» должен быть соответственно изменен.
То, что не запускается из cron, но запускается из терминала, почти всегда является проблемой из-за разницы в среде. Вы должны использовать полный путь к своим исполняемым файлам и явно устанавливать любые переменные среды и PATH
что им нужно.
#!/bin/bash
/usr/bin/ssh 192.168.0.1 '/sbin/iptables -L' > /tmp/output.$$
Кстати, у вас действительно нет вашего скрипта в корневом каталоге, не так ли?
Также, /tmp
это каталог, который уже должен существовать. Вы должны создать свой вывод как файл внутри него, как я показал.
Я не думаю, что ssh-agent поможет в этом случае, потому что cronjob не является подпроцессом того, в среде которого есть параметры связи ssh-agent. Чтобы это работало, вам необходимо настроить вход без пароля.
Один из способов получить больше информации - изменить ваш ssh-вызов на
ssh -vvv 192.168.0.1 'iptables -L' 2>&1 > /tmp/output.$$
так что 1) ssh будет производить подробный вывод отладки на stderr и 2) stderr будет перенаправлен вместе с stdout. В этом выходном файле. $$ должно быть больше информации о том, что происходит ... Я ставлю, как я уже сказал, на отсутствие химической завивки для открытия вашего ключа.