【问题标题】:cron git push with ssh key使用 ssh 密钥的 cron git push
【发布时间】:2014-01-18 02:35:51
【问题描述】:

我为github帐户设置了一个ssh密钥,所以我不必每次都输入密码,它工作正常。这是我使用的脚本:

#!/bin/bash
git push origin master

但是当我使用 cron 运行它时,它不会使用我的 ssh 密钥。这是输出:

Permission denied (publickey)
fatal: The remote end hung up unexpectedly

我四处搜索并找到了一些文章,但没有一篇能解决我的问题。以下是我找到的文章(以及更多):

https://askubuntu.com/questions/110565/why-is-git-not-using-my-pubkey-with-crontab

https://unix.stackexchange.com/questions/35466/how-to-perform-git-push-using-crontab

git push via cron

谁能给我一步一步的指示来解决这个问题?

【问题讨论】:

  • 你的 ssh 私钥有密码吗?如果是,您通常何时/如何输入密码来解锁密钥?
  • @janos 没有密码,所以我不必输入密码。我希望它是自动的。
  • 你说脚本在 shell 中运行时有效,但在 cron 中运行时无效。 cron 是以相同用户还是不同用户运行?例如,也许你在 shell 中使用用户 jack 运行,但在 cron 中你使用用户 root 运行它?
  • @janos 同一用户,我使用crontab -u jack -e 编辑,crontab -l 包含该作业。
  • @xfx 请注意,给出了 -u 选项,它指定要调整其 crontab 的用户的名称,而不是除 root 之外的任何其他人运行 cron。

标签: git ssh cron


【解决方案1】:

正如your thread 之一所述,您需要将执行您的 cron 脚本的 root 用户指向右侧的 HOME(包含 $HOME/.ssh/id_rsa(.pub)、您的公钥和私钥的那个。

#!/bin/bash
HOME=/home/yourAccount git push origin master

如果这不起作用,请开始调试您的 ssh 命令

#!/bin/bash
HOME=/home/yourAccount ssh -Tvvv yourGitServer

并首先使用简单的私钥(不受密码保护)进行检查。
然后,如果您需要密码,请确保您的 ssh-agent is running 以缓存所述密码(或使用钥匙串,as I mentioned before)。

根据your logs,提出了公共ssh密钥,但被拒绝了。

debug1: Trying private key: /home/jack/.ssh/id_rsa
debug3: no such identity: /home/jack/.ssh/id_rsa

仔细检查“BitBucket Set up SSH for Git”,并确保您的id_rsaid_rsa.pub 在那里,with the right protection

还要检查您的 id_rsa.pub 是否已添加到您的 BitBucket 帐户(作为 one 行)。

【讨论】:

  • 还是不行,这是我运行时收到的邮件ssh -Tvvv From: root@myserver.localdomain (Cron Daemon) To: jack@myserver.localdomain Subject: Cron / home/jack/cron.sh 内容类型:文本/纯文本; charset=UTF-8 Auto-Submitted: 自动生成 X-Cron-Env: X-Cron-Env: X-Cron-Env: X-Cron-Env: X-Cron-Env: X-Cron-Env: Message-Id: 日期:2013 年 12 月 31 日星期二 15:56:01 +0800 (CST) /bin/sh: /home/jack/cron.sh: Permission Denied
  • @xfx 您可以编辑您的答案以包含 ssh -Tvvv 命令的完整输出。这样会更容易调试。
  • @xfx 似乎 /home/jack/cron.sh 无法执行...chmod +x 就可以了,然后再试一次
  • @xfx 你的远程 url 是什么?
  • @VonC 等一下,我正在尝试。
【解决方案2】:

根据您的 cmets,我真的不明白为什么您的脚本无法在 cron 中运行。我们可以尝试一些事情来解决问题。

~/.ssh/config 中为运行 cron 作业的用户添加配置,如下所示:

Host github-project1
User git
HostName github.com
IdentityFile /path/to/github.project1.key
#or like this:
#IdentityFile ~/.ssh/github.project1.key

然后在你的 git 工作树中添加一个新的遥控器,如下所示:

git remote add github-project1 github-project1:USER/PROJECT.git

在 URL github-project1:user/project.git 中,仅将 USERPROJECT 更改为适合您项目的值,但保持 github-project1 不变:它必须与 Host 设置中的值匹配ssh 我们刚刚添加的配置。

最后,更改脚本以使用这个新的遥控器:

#!/bin/bash
git push github-project1 master

首先在 shell 中测试脚本,然后在 cron 中测试。

【讨论】:

  • 感谢您的帮助!
猜你喜欢
  • 2016-06-30
  • 2021-06-06
  • 2020-10-06
  • 2020-08-30
  • 2018-04-16
  • 2023-01-05
  • 2012-09-06
  • 2012-06-21
  • 1970-01-01
相关资源
最近更新 更多