我的本地机器在进行git推送时从哪里获得我的用户名

  • 本文关键字:用户 机器 git git github devops zsh
  • 更新时间 :
  • 英文 :


这是一个微妙的问题,因为我知道git config是如何工作的,正如本文中所看到的那样。此用户名在.gitconfig中设置正确,并正确显示在我的git commits上。

不过,gitgconfig与这个问题无关。

这是因为当我做git push时,我会得到

<用户/c/top/arc>git-push-jon-arc-main错误:权限jon链接jon/arc.git拒绝到gui_user_name。

gui_user_name是我在gui中设置的用户名,位于github.com的服务器端。它是你可以在公共github页面上看到的用户名,如下所示:

https://github.com/gui_user_name

我的本地机器是如何做到这一点的,而不使用我在.gitconfig中设置的用户名,我可以看到它在我的git提交中被使用。

我该如何调整?

使用git init设置存储库,然后使用git remote add shortname ssh_link添加远程

注意,这只适用于sshURL,推送到github或其他使用github技巧的网站(许多网站都这样做)

我的本地机器在执行git推送时从哪里获得我的用户名。。。在github.com 上

没有。您的本地机器不提供用户名1你的机器提供给GitHub的东西——然后他们使用——是公钥。更准确地说,您的本地机器至少提供一个,甚至可能提供许多公钥;其中至少有一个必须在GitHub注册,并且注册、接收并运行第一个向GitHub提供用户名。

请注意,要使公钥工作,它必须首先注册,因此该短语有一些多余的部分。不过,这仍然值得思考。ssh使用的过程如下:

  • 您运行——或Git运行——sshoptions user@host command或类似程序:您可以省略user@部分,暗示ssh应该使用.ssh/config中配置的User,或者使用您机器的用户名,作为提供给另一台机器的用户名。由于GitHub在这里需要一个字面git,请参见脚注1。command部分可以为空,表示您想要一个交互式shell,但由于GitHub要求一个非空命令,该命令必须是允许的Git命令之一,因此这也无关紧要。options部分可以包括-i选项;可以从Git传递这些信息,但通常不是这样(见下文)。

  • Ssh将主机解析为IP地址;电话号码";。无论谁回答,都需要一些样板协议来设置可接受的密钥交换算法等,ssh根据您的ssh版本和一些配置选项提供这些算法。然后,他们(在本例中为GitHub)提供他们的安全指纹和其他项目,以便ssh可以验证他们确实是他们声称的人(通过.ssh/known_hosts)。然后舞蹈开始了:

  • 对于ssh可以提供给该主机的每个标识——标识列表取决于您的ssh代理(如果您有一个正在运行的代理)、.ssh/config和任何-i选项——您的ssh将读取密钥对。它将向他们提供公钥(GitHub)。他们将使用它来加密一个随机字符串,并向ssh发送加密的数据。然后,您的ssh将解密这些数据,并将原始数据提供给他们。

当您的ssh能够发送回原始数据时,这证明您持有该密钥对的私钥。这反过来证明了你就是公共密钥所拥有的人,在GitHub上的";这把公钥是弗雷德的,这把是鲍勃的,这一把是拉梅什的,这是伊利亚的">

这就是你您通过提供密钥并成功解密某些内容,间接声称就是那个人

我有两个github帐户,每个帐户都有自己的公钥/私钥对。我之前了解到公钥不能用于两个帐户,这就是为什么我有两对。。。每个帐户一个。

这是您在原始问题中遗漏的关键部分因为您有两个键,并且都工作,所以必须仔细选择您向GitHub提交或首先提交的键选择您要展示的是哪一个是最简单的。

.ssh/cofig文件中,您可以列出一些伪造或真实的主机名以及相应的信息。通过使用fake主机名(例如gh-workgh-home),可以很容易地让ssh只提供工作公钥,或只提供home公钥。这些可能最好通过例子来说明。这是我mac上的一个变体:

Host gh-work
Hostname github.com
User git
IdentitiesOnly yes
IdentityFile ~/.ssh/id.github.work.pub
Host gh-home
Hostname github.com
User git
IdentitiesOnly yes
IdentityFile ~/.ssh/id.github.home.pub

这意味着,如果我运行ssh gh-work,我将有ssh提供给GitHub,只有;工作使用";钥匙如果我运行ssh gh-home,我将让ssh只显示";家庭使用";钥匙

使用-i标志,您可以设置您将提供的第一个密钥。但是,使用IdentitiesOnly yesIdentityFile行,您可以设置键——或您将提供的键:HostIdentityFile行中列出的键,按列出的顺序排列。(然而,在至少一些ssh实现中,任何-i选项密钥都会在这些密钥之前插入,即使使用IdentitiesOnly yes也是如此。多个-i选项似乎会按该顺序插入所有密钥。)

我发现一些ssh实现需要列出私钥文件;macOS one(运行代理,这是macOS登录的一个很好的副作用)允许列出公钥,这就是我在macOS和本例中使用的。列出私钥文件应该不会有什么坏处(ssh应该总是做正确的事情),但出于普遍的偏执,如果可以的话,我更喜欢列出公钥文件,只有在必要的时候才切换到列出私钥文件。


1从技术上讲,您必须让本地机器提供用户名git。但由于这是一个必需的常数,我们可以忽略它。

最新更新