2

Как настроить cron на синтаксический анализ ~/.ssh/config чтобы получить IP-адреса и другие параметры (например, IdentityFile) для SSH? Очевидно, что добавление source /home/user/.ssh/config не помогает.

Я не хочу добавлять опции в скрипт, запускаемый из cron, так как он вызывает более двадцати серверов, которые имеют разные опции. Я сохраняю файл ~/.ssh/config обновленным, когда меняются IP-адреса или ключи PEM, и я не хочу дублировать эту работу для сохранения другого файла.

Cron не наследует окружение пользователя, настраивает его. Таким образом, для данного сценария:

$ cat .ssh/config
Host alpha
    Hostname 1.2.3.4
    User dotan
    IdentityFile ~/.ssh/Dotan.pem
    IdentitiesOnly yes

$ cat script.sh
#!/bin/bash
echo "Alpha"
ssh alpha dmesg

Это работает:

$ ./script.sh > output.log
$ cat output.log
Alpha
[73542728.181371] type=1400 audit(1397118713.764:13): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=710 comm="apparmor_parser"

Однако этот cronjob не работает:

0 0 * * * /home/dotan/script.sh > /home/dotan/output.log

Выход:

Alpha

Это доказывает, что скрипт выполнялся, но SSH не удалось подключиться.

РЕДАКТИРОВАТЬ: я только что обнаружил, что ssh имеет опцию -F /home/dotan/.ssh/config для указания файла конфигурации, но это не решило проблему.

1 ответ1

2

Ваше окружение будет другим. Сравните вывод env при запуске с / без cron.

Кроме того, где вы кладете это в cron? Работает ли он как ваша учетная запись или как root (не могу определить, глядя на вашу работу cron)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .