我在我的機器上處理兩個不同的 SSH 密鑰時遇到了一些問題。我有兩個具有不同用戶名和 ssh 密鑰的 GitHub 帳戶。
我的 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并key3使用 GitHub 的教程創建了一個新密鑰,以防我不小心將現有密鑰上傳到 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 [email protected]
Hi zshap! You've successfully authenticated, but GitHub does not provide shell access.
編輯 2
In my foo repo directory, I can run ssh-personal and then git push to push a new commit and I get the error (correctly):
ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
Then when I run ssh-zshap and git push, I can successfully push but the commit message is from the wrong user! It's by the zackshapiro GitHub user instead of the zshap user.
uj5u.com熱心網友回復:
該Author和Committer欄位由混帳自己設定,而不是由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 "[email protected]" - 通過
~/.gitconfig(或$XDG_CONFIG_HOME/git/config) 中特定于用戶的“全域”配置,可以使用git config --global user.name "Your Name"; git config --global user.email "[email protected]". 用于檢索它的位置可以用環境變數覆寫GIT_CONFIG_GLOBAL。 - 通過
/etc/gitconfig. 用于檢索它的位置可以用環境變數覆寫GIT_CONFIG_SYSTEM。
如果您希望在多個全域組態檔之間進行交換,請考慮使用GIT_CONFIG_GLOBAL組態檔指定備用位置,~/.gitconfig具體取決于您希望在給定時間激活哪個組態檔。
如果您想向他人證明您的身份,這就是簽名提交的目的,該功能需要您設定 OpenPGP 密鑰對。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/313263.html
