首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在crontab上不使用密码进行svn更新

如何在crontab上不使用密码进行svn更新
EN

Ask Ubuntu用户
提问于 2013-12-16 11:09:44
回答 3查看 4.2K关注 0票数 0

我是svn和ssh的新手。我试图在crontab上每3小时更新一次本地系统中的5个存储库。因此,为了实现这一点,我使用以下步骤设置了ssh passwordless login

  1. ssh-keygen

  1. ssh-copy-id -i ~/.ssh/id_rsa.pub test@repo.test.in

  1. 我做了ssh test@repo.test.in,直到这里,它对我很好。我可以在没有密码的情况下登录。但是,当我尝试在5个存储库上执行sudo svn update时,它是在输入密码。如何在没有密码的情况下进行svn更新。我是否可以每3小时更新一次cron上的存储库?我提到了,但没能得到它。

我在用

代码语言:javascript
复制
`Ubuntu version : Ubuntu 13.04`         
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
EN

回答 3

Ask Ubuntu用户

回答已采纳

发布于 2013-12-16 11:31:03

问题是,由于您使用了sudo,所以svn update命令以root的形式执行,因此没有考虑到普通用户的~/.ssh目录。

如果您必须将svn update作为根执行,那么您还应该执行您描述为根的步骤1和步骤2,即使用sudo。但只有这样做,你才会意识到你在做什么。

如果您可以以正常用户的身份进行所有的svn更新,那将是一个更好的方法。在这种情况下,只需删除sudo,只执行命令svn update作为一个cron作业。此外,您还必须以正常用户的身份运行cron作业。请参考这里的答案,了解如何以普通用户的身份执行cron作业:

https://superuser.com/questions/170866/how-to-run-a-cron-job-as-a-specific-user

在这种情况下,您可能希望在/etc/crontab中这样做:

代码语言:javascript
复制
 00 */3   * * *   yourusername   cd /some/path/ && svn update

yourusername替换为生成SSH密钥并将公钥复制到test@repo.test.in的用户的用户名,将/some/path/替换为要签出的svn的本地副本的路径。

票数 0
EN

Ask Ubuntu用户

发布于 2013-12-16 11:16:22

任何使用sudo运行的命令(没有进一步的参数)都将作为root运行。root无法访问SSH密钥,因此您的无密码登录设置失败。

如果您的设置在与您自己的用户一起运行时有效,那么修复是很容易的。为了在cron作业中运行svn更新,但是对于您的用户,请尝试使用-u选项。

代码语言:javascript
复制
sudo -u yourusername svn update
票数 1
EN

Ask Ubuntu用户

发布于 2013-12-16 11:17:40

这是一个相当简单的..。

代码语言:javascript
复制
sudo svn update

WHHHYY?!

我不确定我还需要说些什么,只是想多说一点.以sudo的形式运行意味着您以root的身份运行。这意味着您的本地~/.ssh/配置对zip很重要。

这也意味着创建的所有文件都属于root。用户不可编辑。这就是为什么我们从不在subversion中使用sudo (大声重复这一点)的原因。这是不必要的,也是有害的。

要解决这个问题,我建议删除本地副本(只要有备份),然后以用户身份签出新副本。在您的crontab中,只需省略sudo

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/391513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档