我是 svn 和 ssh 的新手。我尝试在 crontab 上每 3 小时对本地系统中的 5 个存储库进行 svn 更新。因此,为了实现这一点,我已ssh passwordless login
使用以下步骤进行设置:
1. ssh-keygen
2. 3. 我已经做到了 到这里,它对我来说运行良好。我可以不用密码登录。但是,当我尝试在 5 个存储库上执行此操作时,它会提示输入密码。如何使 svn 更新不带密码。有没有什么方法可以让我每 3 小时在 cron 上更新一次存储库。我参考了ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh [email protected]
sudo svn update
这,但无法获取。
我正在使用
`Ubuntu version : Ubuntu 13.04`
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
答案1
任何使用sudo
(不带其他参数)运行的命令都将以 root 身份运行。root 无权访问您的 SSH 密钥,因此您的无密码登录设置会失败。
如果您的设置在您使用自己的用户运行时有效,则修复很容易。为了在 cronjob 中运行 svn 更新,但使用您的用户,请尝试使用该-u
选项。
sudo -u yourusername svn update
答案2
问题在于,由于您使用sudo
,该svn update
命令将作为执行root
,因此~/.ssh
不会考虑您的普通用户的目录。
如果您必须svn update
以 root 身份执行,那么您还应该以 root 身份执行步骤 1 和 2,即使用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 密钥对并将公钥复制到的用户的用户名[email protected]
,并将/some/path/
其替换为您要检出的 svn repo 的本地副本的路径。
答案3
这是一个相当简单的...
sudo svn update
为啥?!??
我不确定我是否还需要说其他什么,只是为了让答案更丰富一些... 以 sudo 身份运行意味着您以 root 身份运行。这意味着您的本地~/.ssh/
配置计入 zip。
这也意味着创建的所有文件都归 root 所有。您的用户无法编辑。这就是为什么(大声重复这一段)我们从不使用sudo
subversion。这是没有必要的,而且是有害的。
要解决此问题,我建议删除本地副本(只要您有备份),然后以您的用户身份签出新副本。在您的 crontab 中,只需省略sudo
。