我创建了一个脚本来在 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-jim
来github-bob
指定所需的用户,从而选择正确的私钥文件。