Как настроить 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
для указания файла конфигурации, но это не решило проблему.