不涉及任何外部脚本的更简单的替代方法是使用 SSH 别名。我知道原发帖人特别要求不要更改~/.ssh/config,但我怀疑这里有误会。
服务器上的本地用户与执行提交的人不同,并且可以与执行“git push”的人不同。
- 在服务器上,托管软件可以作为单个用户运行(通常是“git”)
- 进行提交的人的身份只是 git 的业务(添加到提交的元数据),与服务器无关,并且不受服务器上的身份验证
- 'git push'-er 的身份是相关的,并且建立在基于 ssh 密钥在服务器上运行 git 托管软件的系统上
出于这个原因,在执行推送的系统上,即使是相同的本地帐户和相同的远程服务器,甚至在同一个 git 存储库中,也可以通过使用下面解释的方法使用 ssh 别名来强制使用特定身份。
假设您在 gitorious.org 服务器上有您的常规帐户,我们称其为“开发者”。您不想使用您的“开发者”帐户[1]自动推送,因此您创建了另一个用于同步的 gitorious 帐户,我们称之为“机器人”。
对于自动化,仅使用“机器人”帐户:
第 1 步:将“机器人”添加到需要推送到的 gitorius 项目中。
第 2 步:在本地机器上创建一个无密码密钥(这将与 gitorious 上的机器人帐户相关联)。
ssh-keygen -f ~/.ssh/id_rsa_robot
第 3 步:将公钥 ~/.ssh/id_rsa_robot.pub 上传到 'robot' 帐户的 gitorious 上。
第 4 步:gitorious 上的git SSH URI 格式为git@gitorious.org :prj_or_user/subproject.git。在您的 ~/.ssh/config 文件中添加以下行:
host robot.gitorious.org
HostName gitorious.org
IdentityFile ~/.ssh/id_rsa_robot
IdentitiesOnly "yes"
这将确保:
- 每当您使用“robot.gitorious.org”主机名时,它都会连接到 gitorious.org(主机名选项),
- 它将使用无密码密钥在 gitorius.org(IdentiFile 选项)上作为机器人进行身份验证,并且
- 即使您运行了 ssh 代理,它也会忽略默认密钥并使用无密码密钥(IdentiesOnly “yes”)。
第 5 步:假设您项目的 gitorious 上的 SSH URI 是“git@gitorious.org:project/project.git”,在本地存储库中定义一个新的远程“autopush”,主机名稍作修改:
git remote add autopush git@robot.gitorious.org:project/project.git
设置完成,现在尝试通过'autopush'遥控器推送到gitorious。
git push autopush master
如果一切顺利并且有要推送的更改,您应该会看到您已成功推送到 'gitorious.org' 作为 'robot'
[1] 对于自动推送,必须为帐户生成无密码密钥,但是将其附加到 gitorious 'developer' 帐户意味着自动化作业可以推送到任何涉及 gitorious 的 'developer' 的 gitourious 项目。