[英]How does git know which ssh key to use for its operations?
我有 SSH 密鑰,在~/.ssh
里面。 他們中的許多人實際上。 所以我想知道當git
嘗試通過git@domain.com:group/repo.git
端點連接到存儲庫時,它如何知道要使用哪個?
Git 不知道,也不關心。 它只運行 ssh。
ssh 怎么知道的? 它查看您的~/.ssh/config
文件(編輯:或從 ssh-agent 獲取它;見下文):
Host github.com
# IdentitiesOnly yes # see below to decide if you want this
IdentityFile ~/.ssh/github_id_file
Host domain.com
IdentitiesOnly yes # again, see below
IdentityFile ~/.ssh/another_id_file
編輯:這里是ssh_config 文檔的 Linux 版本的鏈接。 雖然每個系統(MacOS、Linux、各種 BSD,甚至 Windows 端口)都有自己的 ssh 配置處理風格,但它們都共享這些配置中的大部分。 請特別注意這兩項(我已經為 StackOverflow Markdown 稍微調整了格式):
僅限身份
指定 ssh(1) 應僅使用在ssh_config文件中配置的身份驗證身份文件,即使 ssh-agent(1) 或PKCS11Provider提供更多身份。 此關鍵字的參數必須是“是”或“否”。 此選項適用於 ssh-agent 提供許多不同身份的情況。 默認值為“否”。
身份文件
指定從中讀取用戶的 DSA、ECDSA、ED25519 或 RSA 身份驗證身份的文件。 協議版本 1 的默認值為
~/.ssh/identity
,協議版本 2 的默認值為~/.ssh/identity
~/.ssh/id_dsa
、~/.ssh/id_ecdsa
、~/.ssh/id_ed25519
和~/.ssh/id_rsa
。此外,任何除非設置了IdentitiesOnly
,否則IdentitiesOnly
驗證代理表示的身份將用於身份驗證。 ssh(1) 將嘗試從通過將 -cert.pub 附加到指定IdentityFile
的路徑獲得的文件名加載證書信息。文件名可以使用波浪號語法來引用用戶的主目錄或以下轉義字符之一:“%d”(本地用戶的主目錄)、“%u”(本地用戶名)、“%l”(本地主機名)、“%h”(遠程主機名)或“%r”(遠程用戶名)。
配置文件中可以指定多個身份文件; 所有這些身份都將依次嘗試。 多個IdentityFile指令將添加到嘗試的身份列表中(此行為與其他配置指令的行為不同)。
IdentityFile可以與IdentitiesOnly結合使用,以選擇在身份驗證期間提供代理中的哪些身份。
正如阿列克謝十在評論中指出的那樣, IdentityFile
的獨特之處在於它是可加的(而不是一個設置覆蓋另一個)。
您還可以使用附加-v
選項運行 ssh(手動)以跟蹤連接。 在 Git 中,您可以將GIT_SSH
設置為運行ssh -vvv
以進行臨時跟蹤的腳本的名稱(或者對~/.ssh/config
文件中的日志級別大驚小怪)。 我發現這對偶爾調試很有用。 (請注意,您不能通過GIT_SSH
將選項傳遞給 ssh,您需要一個單行腳本,例如ssh-vvv
,其中一行讀取ssh -vvv $@
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.