SSH:权限被拒绝 github

SSH:权限被拒绝 github

我创建了一个脚本来在 github 上创建远程存储库,如果机器有多个用户访问该脚本来创建远程存储库,为此我需要一个 github 令牌密钥,我在以下位置创建了令牌密钥代币Github并使用以下命令在 github 上创建用于 SSH 访问的密钥:

帐户 github.com/usuario1

linuxuser@linuxmint$ ssh-keygen -t rsa -b 4096 -C "[email protected]"

/home/linuxuser/.ssh/id_rsa_hotmail_github_usuario1

getting like below:

Enter file in which to save the key (/home/linuxuser/.ssh/id_rsa): /home/linuxuser/.ssh/id_rsa_hotmail_github_usuario1


帐户 github.com/usuario2

linuxuser@linuxmint$ ssh-keygen -t rsa -b 4096 -C "[email protected]"

/home/linuxuser/.ssh/id_rsa_yahoo_github_usuario2

getting like below:

Enter file in which to save the key (/home/linuxuser/.ssh/id_rsa): /home/linuxuser/.ssh/id_rsa_yahoo_github_usuario2

列出 ssh 密钥

ls -a ~/.ssh/
id_rsa_hotmail_github_usuario1  id_rsa_hotmail_github_usuario1.pub
id_rsa_yahoo_github_usuario2  id_rsa_yahoo_github_usuario2.pub

我复制了每个密钥并将其放入您的帐户中。我已登录到创建密钥的 linux 用户

在脚本中,我更改了用户向量,将来自 github 的用户保留为:

USUARIOS_GIT=("usuario1" "usuario2" "github_usuario3")

和令牌向量我把每个github用户的令牌

CHAVE_TOKEN=("dhkssklfhfkh" "kfhfflhd" "chave_token_github_usuario3")

也就是说,有两个 github 帐户,我必须在其中创建远程存储库,并使用用户登录到我的计算机的脚本linuxuser

linuxuser@linuxmint/开发$ gitpratico usuario1 projeto1

它显示以下错误:

git push [email protected]:usuario1/projeto1.git master
ERROR: Permission to usuario1/projeto1.git denied to usuario2.

创建一个空存储库,但不允许我进行任何更改或提交,之后不将存储库文件上传到 github.com/usuario1 看起来它正在尝试访问usuario2谁拥有 yahoo 帐户。

例如,如果公司机器只有一个用户,并且该机器最多由三个人在不同时间使用同一机器用户访问,并且他们需要使用脚本在不同的 github 用户中创建远程存储库,则会通过以下方式呈现此问题创建空的远程存储库并且不允许进行任何提交。

如何解决这个问题,以便能够在不同的帐户中创建存储库,而无需登录另一个 Linux 用户?

用于在不同github用户下创建远程存储库的脚本 脚本 gitpratico_multiuser


我仅使用我的用户进行了此配置,即使如此,它也会创建空存储库,而不添加项目文件夹中存在的文件。

我的文件 ~/.ssh/config 这个

# Default GitHub user (usuario1)
Host github-hotmail  
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_hotmail_github_usuario1
  IdentitiesOnly yes
  User git

# Github user (usuario2)
Host github-yahoo  
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_yahoo_github_usuario2
  IdentitiesOnly yes
  User git

将 ssh 私钥添加到您的代理:

$ ssh-add ~/.ssh/id_rsa_yahoo_github_usuario1
$ ssh-add ~/.ssh/id_rsa_yahoo_github_usuario2

测试连接

在用户1中

$ ssh -T git@github-hotmail
Hi usuario1! You've successfully authenticated, but GitHub does not provide shell access.

在用户2中

$ ssh -T git@github-yahoo
Hi usuario2! You've successfully authenticated, but GitHub does not provide shell access.

打字时gitpratico_multiuser user1 <repository1>

如果我输入git status它不会显示有文件要上传

当我输入:

打字时gitpratico_multiuser user2 <repository2>

如下表所示:

ERROR: Permission to usuario2/repository2.git denied to usuario1.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

但当我登录另一个linux用户并进行以下设置时,我仍然遇到另一个问题:

root@linuxmint# 登录 linuxuser2

userlinux2@linuxmint$ mkdir .ssh

userlinux2@linuxmint$ nano ~/.ssh/config

# Default GitHub user (user1)
github-hotmail host
   HostName github.com
   IdentityFile /home/userlinux1/.ssh/id_rsa_hotmail_github_usuario1
   Identities Only yes
   User git

# Github user (user2)
github-yahoo host
   HostName github.com
   IdentityFile /home/userlinux1/.ssh/id_rsa_yahoo_github_usuario2
   Identities Only yes
   User git

linuxuser2@linuxmint$ sudo ssh-add /home/userlinux1/.ssh/id_rsa_yahoo_github_user2

[sudo] senha para linuxuser2:     
Could not open a connection to your authentication agent.

linuxuser2@linuxmint$ sudo ssh-add /home/userlinux2/.ssh/id_rsa_hotmail_github_usuario1

[sudo] senha para linuxuser2:     
Could not open a connection to your authentication agent.

我无法为登录到另一个 Linux 用户的 github user1 和 user2 创建存储库,我尝试创建 .ssh 文件夹并将私钥复制到,linuxuser2但我也没有得到结果,我如何解决这个问题我搜索并没有'没有找到任何关于如何在另一个不同的 linuxuser2 中使用 userlinux1 中创建的相同密钥的github_usuario1信息。github_usario2

我怎么解决这个问题?

答案1

造成这种情况的根本原因是 Github 选择使用 SSH 密钥的方式。有一个解决办法...

通常 SSH 应指定它希望登录的用户。然而,Github 选择仅使用公钥来识别用户。请注意,您始终指定git@github.com,所以您总是告诉 SSH 以用户身份登录git

所以通常情况下您只需将一个 SSH 密钥附加到两个帐户,并指定您想要的用户,但您不能在此处执行此操作,因为 SSH 密钥将用于识别哪个帐户。

这是有问题的,因为您的 SSH 命令行将尝试您提供的每个公钥,并在第一个成功的公钥处停止。这意味着你会不小心以错误的用户身份登录,然后 Github 会告诉你“Access Denied”,因为成功登录无法访问所需的 Git 存储库。

人们可能会忍不住称其为“错误”,在这种情况下它肯定会引起一些头痛。不过,这种设置并不完全不寻常。


你能为这个做什么?

您可以在 SSH 配置中设置配置文件:有一个相当不错的示例这里

创建或编辑文件~/.ssh/config/并添加两个配置文件。我会打电话jim给他们bob

Host github-jim
   HostName github.com
   IdentityFile ~/.ssh/jim_private_key
   IdentitiesOnly yes
   User git
   
Host github-bob
   HostName github.com
   IdentityFile ~/.ssh/bob_private_key
   IdentitiesOnly yes
   User git

现在,您只需对 git URL 进行细微更改即可告诉 SSH 使用哪个密钥:

例如:

git clone github-jim:jim/projeto1.git

git clone github-bob:bob/projeto1.git

请注意我们如何替换[email protected]github-jimgithub-bob指定所需的用户,从而选择正确的私钥文件。

相关内容