Я новичок в svn и ssh. Я пытаюсь сделать svn обновление 5 репозиториев в моей локальной системе каждые 3 часа на crontab. Итак, для достижения этой цели я настроил ssh passwordless login
, используя следующие шаги:
1. ssh-keygen
2. ssh-copy-id -i ~/.ssh/id_rsa.pub test@repo.test.in
3. Я сделал ssh test@repo.test.in
Пока у меня все работает нормально. Я могу войти без пароля. Но когда я пытаюсь сделать sudo svn update
в 5 репозиториях, он запрашивает пароль. Как сделать svn update без пароля. Можно ли как-нибудь обновлять репозитории каждые 3 часа на cron. Я сослался на это , но не смог получить его.
Я использую
`Ubuntu version : Ubuntu 13.04`
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
Проблема в том, что, поскольку вы используете sudo
, команда svn update
выполняется как root
, поэтому каталог ~/.ssh
вашего обычного пользователя не учитывается.
Если вам нужно сделать svn update
как root, то вы также должны выполнить шаги 1 и 2, которые вы описали как root, то есть с sudo
. Но только делая это, вы очень хорошо знаете, что делаете.
Если бы вы могли делать все эти обновления SVN от имени обычного пользователя, это было бы намного лучшим способом. В этом случае просто удалите sudo
и выполняйте команду svn update
только как cronjob. Кроме того, вам также придется запускать cronjob как обычный пользователь. Обратитесь к этому ответу здесь, чтобы узнать, как выполнять cronjobs как обычный пользователь:
https://superuser.com/questions/170866/how-to-run-a-cron-job-as -a-specific-user
В вашем случае вы, вероятно, захотите что-то подобное в /etc/crontab
:
00 */3 * * * yourusername cd /some/path/ && svn update
Замените yourusername
именем пользователя пользователя который сгенерировал пару ключей SSH и скопировал открытый ключ в test@repo.test.in
и /some/path/
с путем к вашей локальной копии репозитория svn, который вы хотите проверить.
Любая команда, запущенная с sudo
(без дополнительных аргументов), будет выполняться от имени пользователя root. root не имеет доступа к вашим SSH-ключам, поэтому настройка входа без пароля не удалась.
Если ваша настройка работает, когда вы запускаете ее с собственным пользователем, это легко исправить. Чтобы запускать обновления svn в cronjob, но с вашим пользователем, попробуйте использовать опцию -u
.
sudo -u yourusername svn update
Это довольно простой ...
sudo svn update
Я не уверен, что мне нужно сказать что-то еще, а просто набросать ответ немного подробнее ... Запуск как sudo означает, что вы работаете как root. Это означает, что ваша локальная ~/.ssh/
конфигурация имеет значение для zip.
Это также означает, что все созданные файлы принадлежат пользователю root. Не редактируется вашим пользователем. И именно поэтому (повторите этот бит вслух) мы никогда не используем sudo
с subversion . Это ненужно и вредно.
Чтобы это исправить, я бы предложил стереть вашу локальную копию (если у вас есть резервная копия), а затем проверить новую копию как ваш пользователь. А в вашем crontab просто опустите sudo
.