如何同时指定 Bitbucket 存储库密钥和用户密钥,使存储库密钥为只读,用户密钥提供推送功能?

How to specify both a Bitbucket repository key and a user key such that the repository key is read-only and the user key provides push capability?

Bitbucket 提供了在存储库 上设置密钥以实现只读 访问。在不讨论以下方法的优点的情况下,我想使用此功能 git pull 将更改部署到网站(作为用户 root),但我也想提供一个非 root 用户偶尔能够 push 使用自己的密钥从 Web 服务器访问 repo。我已将 root 的默认 id_rsa.pub 密钥指定为 Bitbucket 存储库密钥,并且 pull(只读)功能在以 root 身份登录时有效。但是,我在尝试从特定用户 push 时收到错误消息。错误是:

Load key "/home/user1/.ssh/bitbucket": Permission denied
git@bitbucket.org: Permission denied (publickey).
fatal: Could not read from remote repository.

我将 git push 作为 user1 发出,所以我不明白为什么它在尝试加载密钥时出现 Permission denied 错误。为什么 user1 不能加载和使用他自己的密钥?下面提到的两个密钥的私有部分的权限设置为 600,public 部分的权限设置为 644。

设置:

  • Ubuntu 20.04
  • 两个用户:rootuser1
  • rootid_rsa.pub 密钥已添加到 Bitbucket 存储库的 Access Keys
  • 在 BitBucket

/root/.ssh/ 中的一个 config 文件包含以下内容:

Host bitbucket.org
    HostName bitbucket.org
    IdentityFile /root/.ssh/id_rsa
    IdentitiesOnly yes

/home/user1/.ssh/ 中的 config 文件包含以下内容:

Host bitbucket.org
    HostName bitbucket.org
    User git_user1
    IdentityFile /home/user1/.ssh/bitbucket
    IdentitiesOnly yes

git remote -v 显示:

  • origin git@bitbucket.org:our_bitbucket_organization/website-name.git (fetch)
  • origin git@bitbucket.org:our_bitbucket_organization/website-name.git (push)

user1 可以从他们的开发服务器 push 到回购协议 - 用户是组织中的用户,回购协议中的用户也是如此。我也尝试在 user1 的配置文件中注释掉 User 行,但得到同样的错误。

我也研究过 this question (and especially this answer),但在其中找不到任何可以完全解决此错误的内容。我想要两个单独的 config 文件,而不是一个 config 文件。

非常感谢任何建议。

Load key "/home/user1/.ssh/bitbucket": Permission denied

该错误表示 user1 无法读取该文件。修复:

chown -R user1 /home/user1/.ssh
chmod -R u=rwX,go= /home/user1/.ssh

PS。这比仅修复一个文件更通用。以防万一