为什么更改我的 SSH 密钥不会为我的提交显示正确的作者?
Why doesn't changing my SSH key make the correct author be shown for my commits?
我在处理我机器上两个不同的 SSH 密钥时遇到了一些问题。我有两个 GitHub 具有不同用户名和 ssh 密钥的帐户。
我在我的 GitHub @ zshap/test-push
上有一个私有目录,奇怪的是,当我更改自述文件并将其推送时,我看到了来自我的 zackshapiro 用户的提交,他不是协作者,但尚未被邀请加入该存储库。
我不明白我的其他用户如何能够推送到 zshap 的私人仓库。
为了更好的衡量,这些帐户也有不同的个人资料图片,因此很容易识别出 zackshapiro 已推送到 zshap 存储库。
另外,我使用这些别名在终端中设置我的 ssh 密钥:
alias ssh-personal="ssh-add -D; ssh-add -K ~/.ssh/key1"
alias ssh-zshap="ssh-add -D; ssh-add -K ~/.ssh/key3"
另外,我删除了 SSH 密钥 key2
,并使用 GitHub 创建了一个新的 key3
' s 教程,以防我不小心将现有密钥上传到 GitHub。此外,我已确保 GitHub 设置的 SSH 和 GPG 密钥部分中显示的签名完全不同。
我的~/.ssh/config
:
Host zackshapiro
HostName github.com
User git
IdentityFile ~/.ssh/key1
IdentitiesOnly yes
Host zshap
HostName github.com
User git
IdentityFile ~/.ssh/key3
IdentitiesOnly yes
Host *
AddKeysToAgent yes
UseKeychain yes
这非常令人困惑,关于如何在一台机器上使用多个 ssh 密钥的其他答案似乎没有解决这种特殊情况。我希望在这里得到一些帮助,所以我不会越过这些电线。
谢谢!
编辑
如果我 运行 ssh -T
,我在这里得到了正确的用户名,所以提交来自我的其他用户和 ssh 密钥是非常奇怪的
$ ssh -T git@github.com
Hi zshap! You've successfully authenticated, but GitHub does not provide shell access.
编辑 2
在我的 foo
回购目录中,我可以 运行 ssh-personal
然后 git push
推送一个新的提交,我得到错误(正确):
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
然后当我运行ssh-zshap
和git push
时,我可以成功推送但是提交消息来自错误的用户!是由 zackshapiro GitHub 用户而不是 zshap 用户。
Author
和 Committer
字段由 git 本身设置,而不是由 github 设置,当您第一次 运行 git commit
创建一个提交。该提交中的所有内容都成为提交哈希的一部分,因此如果不使该提交和引用它的所有其他提交都无效(或者至少重写所有受影响的提交以由新的和不同的哈希标识) ).因此,用于向 github 进行身份验证的 SSH 密钥无法更改提交本身。
如果你想为 git 的目的设置你的身份,你可以通过几种方式来实现,如下所示(按优先顺序排列)(所以如果设置了多个,则前面的那个列表获胜):
- 通过
GIT_AUTHOR_NAME
、GIT_AUTHOR_EMAIL
、GIT_COMMITTER_NAME
和 GIT_COMMITTER_EMAIL
的环境。一个重要的注意事项:在执行 git commit --amend
时,使用这些可以覆盖 作者和提交者的预先存在的值;通常只有提交者在修改期间被更新。
- 通过
yourproject/.git/config
中的每个项目配置,可以使用 git config user.name "Your Name"; git config user.email "your.email@example.com"
进行修改
- 通过
~/.gitconfig
(或 $XDG_CONFIG_HOME/git/config
)中用户特定的“全局”配置,可以使用 git config --global user.name "Your Name"; git config --global user.email "your.email@example.com"
进行修改。用于检索它的位置可以用环境变量 GIT_CONFIG_GLOBAL
. 覆盖
- 通过
/etc/gitconfig
中的系统范围配置。用于检索它的位置可以用环境变量 GIT_CONFIG_SYSTEM
. 覆盖
如果您想要在多个全局配置文件之间进行交换,请考虑使用 GIT_CONFIG_GLOBAL
配置文件为 ~/.gitconfig
指定备用位置,具体取决于您希望在某个位置激活哪个配置文件给定时间。
如果您想向其他人证明您的身份,这就是签名提交 的目的,该功能要求您设置 OpenPGP 密钥对。
我在处理我机器上两个不同的 SSH 密钥时遇到了一些问题。我有两个 GitHub 具有不同用户名和 ssh 密钥的帐户。
我在我的 GitHub @ zshap/test-push
上有一个私有目录,奇怪的是,当我更改自述文件并将其推送时,我看到了来自我的 zackshapiro 用户的提交,他不是协作者,但尚未被邀请加入该存储库。
我不明白我的其他用户如何能够推送到 zshap 的私人仓库。
为了更好的衡量,这些帐户也有不同的个人资料图片,因此很容易识别出 zackshapiro 已推送到 zshap 存储库。
另外,我使用这些别名在终端中设置我的 ssh 密钥:
alias ssh-personal="ssh-add -D; ssh-add -K ~/.ssh/key1"
alias ssh-zshap="ssh-add -D; ssh-add -K ~/.ssh/key3"
另外,我删除了 SSH 密钥 key2
,并使用 GitHub 创建了一个新的 key3
' s 教程,以防我不小心将现有密钥上传到 GitHub。此外,我已确保 GitHub 设置的 SSH 和 GPG 密钥部分中显示的签名完全不同。
我的~/.ssh/config
:
Host zackshapiro
HostName github.com
User git
IdentityFile ~/.ssh/key1
IdentitiesOnly yes
Host zshap
HostName github.com
User git
IdentityFile ~/.ssh/key3
IdentitiesOnly yes
Host *
AddKeysToAgent yes
UseKeychain yes
这非常令人困惑,关于如何在一台机器上使用多个 ssh 密钥的其他答案似乎没有解决这种特殊情况。我希望在这里得到一些帮助,所以我不会越过这些电线。
谢谢!
编辑
如果我 运行 ssh -T
,我在这里得到了正确的用户名,所以提交来自我的其他用户和 ssh 密钥是非常奇怪的
$ ssh -T git@github.com
Hi zshap! You've successfully authenticated, but GitHub does not provide shell access.
编辑 2
在我的 foo
回购目录中,我可以 运行 ssh-personal
然后 git push
推送一个新的提交,我得到错误(正确):
ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
然后当我运行ssh-zshap
和git push
时,我可以成功推送但是提交消息来自错误的用户!是由 zackshapiro GitHub 用户而不是 zshap 用户。
Author
和 Committer
字段由 git 本身设置,而不是由 github 设置,当您第一次 运行 git commit
创建一个提交。该提交中的所有内容都成为提交哈希的一部分,因此如果不使该提交和引用它的所有其他提交都无效(或者至少重写所有受影响的提交以由新的和不同的哈希标识) ).因此,用于向 github 进行身份验证的 SSH 密钥无法更改提交本身。
如果你想为 git 的目的设置你的身份,你可以通过几种方式来实现,如下所示(按优先顺序排列)(所以如果设置了多个,则前面的那个列表获胜):
- 通过
GIT_AUTHOR_NAME
、GIT_AUTHOR_EMAIL
、GIT_COMMITTER_NAME
和GIT_COMMITTER_EMAIL
的环境。一个重要的注意事项:在执行git commit --amend
时,使用这些可以覆盖 作者和提交者的预先存在的值;通常只有提交者在修改期间被更新。 - 通过
yourproject/.git/config
中的每个项目配置,可以使用git config user.name "Your Name"; git config user.email "your.email@example.com"
进行修改
- 通过
~/.gitconfig
(或$XDG_CONFIG_HOME/git/config
)中用户特定的“全局”配置,可以使用git config --global user.name "Your Name"; git config --global user.email "your.email@example.com"
进行修改。用于检索它的位置可以用环境变量GIT_CONFIG_GLOBAL
. 覆盖
- 通过
/etc/gitconfig
中的系统范围配置。用于检索它的位置可以用环境变量GIT_CONFIG_SYSTEM
. 覆盖
如果您想要在多个全局配置文件之间进行交换,请考虑使用 GIT_CONFIG_GLOBAL
配置文件为 ~/.gitconfig
指定备用位置,具体取决于您希望在某个位置激活哪个配置文件给定时间。
如果您想向其他人证明您的身份,这就是签名提交 的目的,该功能要求您设置 OpenPGP 密钥对。