簡體   English   中英

git 如何知道使用哪個 ssh 密鑰進行操作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM