Автоматизировать Git-Pull, застрял с брелок
Я хотел бы создать cronjob для автоматического запуска git-pull каждую минуту. Проблема в том, что мое хранилище является частным, мне пришлось создавать ключи в моей системе (Ubuntu Server 12.04). Я установил связку ключей, и теперь ssh-agent не позволяет системе каждый раз запрашивать у меня пароль. Проблема в том, что он не работает из crontab! Почему из оболочки это работает, а из crontab меня спрашивают пароль?
2 ответа
В своем сценарии вы делаете $(eval ssh-agent)
и затем ssh-add <private_key>
?
Чтобы проверить, сделайте ssh-add -l
перед тем, как делать git pull, убедитесь, что ваши ключи находятся там, где они должны быть.
[править] Попробуйте создать такой скрипт:
#!/bin/bash
set -e
cd /var/www/GITREPO
eval $(ssh-agent)
ssh-add /home/multiformeingegno/.ssh/id_rsa
ssh-add -l
git pull
Лучше , чем cronjob, я предлагаю скрипт hooks/post-receive:
Во-первых, в моем.bashrc:
[ -x /usr/bin/keychain ] && /usr/bin/keychain ~/.ssh/id_rsa || echo "Missing keychain pkg..."
[ -f ~/.keychain/$(hostname)-sh ] && source ~/.keychain/$(hostname)-sh
Который запрашивает парольную фразу при первом входе в систему (необходимо), чтобы ss-агент брелка зарегистрировался, как вы знаете.
Затем в пустом хранилище: /path/to/bare/repo.git/hooks/post-receive:
#!/bin/bash
ssh <host> sh << EOF #I launch sh here for less verbosity on terminal login
. ~/.keychain/\$(hostname)-sh
cd /path/to/cloned/repo.git
unset GIT_DIR
git pull
EOF
не забудьте:
chmod +x /path/to/bare/repo.git/hooks/post-receive
таким образом, из моего клона разработчика из чистого репозитория, производственный автоматически обновляется.