ssh設定 - ssh-keygen用法




多個GitHub帳戶和SSH配置 (7)

我在獲取兩個不同的SSH密鑰/ GitHub帳戶時遇到了一些麻煩,難以一起玩。 我有以下設置:

Repos使用[email protected]:accountname從一個帳戶訪問

使用[email protected]:anotheraccount可以從其他帳戶訪問Repos [email protected]:anotheraccount

每個帳戶都有自己的SSH密鑰。 兩個SSH密鑰都已添加,並且我創建了一個配置文件。 我不相信配置文件是正確的。 我不太清楚如何指定使用[email protected]:accountname訪問repos [email protected]:accountname應使用id_rsa[email protected]:anotheraccount應使用id_rsa_anotheraccount


作為@stefano答案的補充,當為另一個帳戶生成新的SSH密鑰時,最好使用帶-f命令,

ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -C "[email protected]"

由於id_rsa_work文件不存在於路徑~/.ssh/ ,並且我手動創建此文件,並且它不工作:(


~/.ssh/config使用IdentityFile參數:

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/github.rsa
    User petdance

安迪萊斯特的回答是準確的,但我發現我需要做一個重要的額外步驟才能實現這個目標。 在試圖建立兩個配置文件,一個用於個人和一個用於工作,我的~/.ssh/config大致如下:

Host me.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/me_rsa

Host work.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/work_rsa

直到我做了一個ssh-add ~/.ssh/work_rsa我的工作概要才ssh-add ~/.ssh/work_rsa 。 之後,連接到github使用正確的配置文件。 以前,他們默認第一個公鑰。

對於使用ssh-add無法打開與身份驗證代理的連接
檢查: https://.com/a/17695338/1760313 : https://.com/a/17695338/1760313


我使用shell腳本將我切換到任何我想要“活躍”的帳戶。 基本上,你從一個新的開始開始,讓一個帳戶配置正確並且正常工作,然後將這些文件移動到具有正確前綴的名稱。 從此,您可以使用命令“github”或“gitxyz”來切換:

# my github script
cd ~/.ssh
rm id_rsa
rm id_rsa.pub
rm config

ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config

git config --global user.email "[email protected]"
git config --global github.user "dhoerl"        
# git config --global github.token "whatever_it_is" # now unused

ssh-add -D

這件事我非常幸運。 我還在Xcode中創建了一個運行腳本(對於Mac用戶),所以它不會構建我的項目,除非我有適當的設置(自使用git以來):

運行腳本放置在依賴關係之後:

#! /bin/ksh
if [ "$(git config --global --get user.email)" != "[email protected]<company>.com" ]
then
    exit 1
fi

我最近必須這樣做,並且必須篩選所有這些答案和他們的評論以最終將信息拼湊在一起,所以為了您的方便,我將把它放在一個帖子中:


第1步:ssh密鑰
創建您需要的任何密鑰對。 在這個例子中,我將default / original'id_rsa'(這是默認值)和我的新'id_rsa-work'命名為:

ssh-keygen -t rsa -C "[email protected]"


第2步:ssh配置
通過創建/修改〜/ .ssh / config來設置多個ssh配置文件。 請注意略有不同的'主機'值:

# Default GitHub
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa

# Work GitHub
Host work.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_work


第3步:ssh-add
你可能也可能不需要這樣做。 要檢查,通過運行列出身份指紋:

$ ssh-add -l
2048 1f:1a:b8:69:cd:e3:ee:68:e1:c4:da:d8:96:7c:d0:6f stefano (RSA)
2048 6d:65:b9:3b:ff:9c:5a:54:1c:2f:6a:f7:44:03:84:3f [email protected] (RSA)

如果您的輸入不存在,那麼運行:

ssh-add ~/.ssh/id_rsa_work


第4步:測試
為了測試你所做的一切正確,我建議進行以下快速檢查:

$ ssh -T [email protected]
Hi stefano! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T [email protected]
Hi stefano! You've successfully authenticated, but GitHub does not provide shell access.

請注意,您必鬚根據您要使用的密鑰/身份來更改主機名(github / work.github)。 但現在你應該很好走! :)


我用了,

Host github.com
   HostName github.com
   IdentityFile ~/.ssh/github_rsa
   User [email protected]

它工作得很好。

在你的.ssh / config文件中使用上述設置來獲取不同用戶名的不同rsa密鑰。


比方說, alice是一個github.com用戶,擁有2個或更多的私有倉庫。 對於這個例子,我們將只使用兩個名為repo1repo2存儲庫

https://github.com/alice/repo1

https://github.com/alice/repo2

您需要從這些存儲庫中提取數據,而不必在服務器或多台服務器上輸入密碼。 例如,您希望執行git pull origin master ,並且希望在不詢問密碼的情況下發生這種情況。

你不喜歡與ssh-agent打交道,你已經發現了(或者你現在發現) ~/.ssh/config一個文件,讓你的ssh客戶端知道使用哪個私鑰取決於主機名和用戶名,簡單的配置條目看起來像這樣:

Host github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/alice_github.id_rsa
  IdentitiesOnly yes

所以你繼續創建你的(alice_github.id_rsa, alice_github.id_rsa.pub)密鑰對,然後你也去了你的倉庫的.git/config文件,並且你修改了你的遠程origin的URL是這樣的:

[remote "origin"]
        url = "ssh://[email protected]/alice/repo1.git"

最後,你去了存儲庫Settings > Deploy keys部分,並添加了alice_github.id_rsa.pub的內容

此時你可以在不輸入密碼的情況下做你的git pull origin master

但第二個存儲庫呢?

所以你的直覺就是抓住這個鍵並將它添加到repo2的Deploy鍵中,但是github.com會出錯並告訴你鍵已經被使用了。

現在你去創建另一個密鑰(使用ssh-keygen -t rsa -C "[email protected]" ,當然沒有密碼),並且這樣就不會變得亂七八糟,你現在可以將你的密鑰命名為:

  • repo1 :( (repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
  • repo2 (repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)

現在你將把新的公鑰放在github.com的repo2的部署密鑰配置上,但是現在你需要解決一個ssh問題。

如果存儲庫託管在同一個github.com域中,ssh如何告訴哪個密鑰要使用?

您的.ssh/config文件指向github.com並且它不知道在執行pull操作時要使用哪個鍵。

所以我找到了一個github.com的竅門。 您可以告訴您的ssh客戶端,每個存儲庫位於不同的github.com子域中,在這些情況下,它們將是repo1.github.comrepo2.github.com

所以第一件事是編輯你的repo克隆上的.git/config文件,所以它們看起來像這樣:

對於repo1

[remote "origin"]
        url = "ssh://[email protected]/alice/repo1.git"

對於repo2

[remote "origin"]
        url = "ssh://[email protected]/alice/repo2.git"

然後,在您的.ssh/config文件中,現在您可以輸入每個子域的配置:)

Host repo1.github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa
  IdentitiesOnly yes

Host repo2.github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa
  IdentitiesOnly yes

現在,您可以在不輸入來自兩個存儲庫的任何密碼的情況下對git pull origin master進行配置。

如果你有多台機器,你可以將密鑰複製到每台機器上並重新使用它們,但是我建議做好每台機器和每台機器生成1個密鑰的工作。 你將有更多的鑰匙可以處理,但如果一個人受到攻擊,你的脆弱性就會降低。





ssh-keys