为啥?!??

为啥?!??

我是 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 所有。您的用户无法编辑。这就是为什么(大声重复这一段)我们从不使用sudosubversion。这是没有必要的,而且是有害的。

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

相关内容