除非最近登录,否则 SSH 密钥不适用于 git 推送

SSH key not working for git push unless recently logged in

背景

我使用 SiteGround 来托管我的网站。我在 SiteGround 上为我的每个站点都设置了 git 回购协议。我使用 SSH 密钥进行身份验证。我只是将 siteground 设置为我也可以推送的遥控器之一。

问题

除非我通过 SSH 登录,否则 SSH 密钥似乎会在一段时间后过期。我无法确定到期前需要多长时间。好像有几周了。

程序

  1. 等几个星期。
  2. 对我的网站进行一些修改,提交并合并到main
  3. $ git push sitegroundRemote HEAD:master

然后我得到这个错误:

$ git push sitegroundRemote HEAD:master
<username>@subdomain.siteground.biz: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
  1. $ ssh sitename <-- 这行得通。我现在登录到远程会话
  2. $ exit
  3. $ git push sitegroundRemote HEAD:master

现在可以了。我可以在接下来的几天或几周内继续推进,而不必 ssh in.

似乎密钥因 git 目的而过期,但未登录 shell。并登录 shell 重新启用密钥以用于 git 目的。

附加信息

SSH 配置

我的 ~/.ssh/config 文件中的条目如下所示:

Host sitename
  HostName sitename.com
  User <user-name>
  Port <port-number>
  IdentityFile ~/.ssh/sitename.com

git 配置

我的 git 配置文件中的条目如下所示:

[remote "sitegroundRemote"]
    url = ssh://<user-name>@<subdomain>.siteground.biz:<port>/home/<user-name>/www/sitename.com/repos/repo.git
    fetch = +refs/heads/*:refs/remotes/master/*

正在生成 SSH 密钥

为了生成我的 SSH 密钥,我执行了以下操作:

  1. $ ssh-keygen
  2. 输入的位置以及名称和密码(/Users/username/.ssh/sitename.com
  3. $ ssh-add -K /Users/username/.ssh/sitename.com
  4. $ pbcopy < ~/.ssh/sitename.com.pub
  5. 将其粘贴到 SiteGround 的 SSH 密钥部分。

所有这些让我只需 $ ssh sitename 即可通过 bash 访问我的站点。所以关键有效。我没有使用任何 -t 选项来对其设置时间限制。

问题

知道如何在不经常登录的情况下继续推送到 SiteGround 吗?

我应该补充一点,我确实联系了 SiteGround 的支持,答案基本上是“会话到期。我们对此无能为力。”所以我希望这里有人有一些想法。

So I'm hoping someone here has some ideas.

除了解决方法外,可能没有任何明显的解决方案。

作为解决方法,您可以设置一个 cron 作业,该作业每天执行 ssh sitename ls(单个命令并退出),以“刷新”会话。