У меня есть локальная копия репозитория Bitbucket на одном из моих серверов (под пользователем rob), и я создал скрипт, который запускается каждый час в cron и пытается извлечь и обновить локальную копию. У меня проблема в том, что hg pull
не работает, даже если я следую той же процедуре вне cron, она работает нормально.
Я настраиваю ключ ssh для доступа к Bitbucket обычным способом (т.е. следовал руководству в документации Bitbucket), а затем репо было изначально клонировано с
cd /home/rob
hg clone ssh://hg@bitbucket.org/robjohncox/tools
Скрипт обновления по адресу /home/rob/bin/update_tools.sh
является:
#! /bin/bash
cd /home/rob/tools
hg pull >> /tmp/update_tools.log
hg update >> /tmp/update_tools.log
И crontab для пользователя rob:
0 * * * * /home/rob/bin/update_tools.sh
Все очень просто. Однако, когда задание выполняется, мы видим, что вызов hg pull
выходит из строя
remote: Permission denied (publickey).
Кто-нибудь знает, почему это может происходить - есть ли еще какой-то шаг, который мне нужно предпринять, чтобы при запуске cron он имел доступ к соответствующему открытому ключу? В update_tools.sh
сценарий отлично работает из оболочки.
Попробуйте явно указать команду ssh, например.
hg pull -e 'ssh -i /location/of/key'
Cron работает с минимальной оболочкой, поэтому у него не будет доступа к вашему процессу ssh-agent, потому что переменные среды SSH не установлены.
Попробуйте добавить что-нибудь вроде следующего в ваш файл ~ / .ssh / config
Host example.com
IdentityFile ~/.ssh/id_bitbucket
чтобы указать ssh использовать другой ключ для соответствующего сервера.