2012-07-25 110 views
34

所以,我有一臺主機,稱之爲rob。我在rob上使用了ssh-keygen來獲取一個公鑰,我給github添加了一個新的部署密鑰屏幕,用於存儲庫cheech。現在我想在rob上部署chong。但是,如果我在github上爲存儲庫chong添加新的部署密鑰屏幕,並粘貼我在rob上生成的公鑰,那麼它會顯示key already in use。我想,如果他們的鑰匙在使用中,我可以在rob上克隆chong,但那說明權限被拒絕。github部署密鑰:我如何爲單臺機器授權多個存儲庫

很明顯,這比我想象的更復雜,它涉及到有多個鍵或其他東西。我應該如何克隆chongrob

謝謝你的幫助。

回答

2

如果你舒適讓rob訪問所有在您的帳戶GitHub的私有庫,你可以刪除密鑰作爲部署的關鍵從cheech,然後將其作爲SSH密鑰添加到您的GitHub帳戶作爲一個整體。這會給rob訪問cheechchong

如果您的帳戶中有其他存儲庫,並且您不希望rob可以訪問,則這不起作用。

如果您需要更細緻的控制,您需要在rob上生成其他密鑰,並將它們作爲部署密鑰分配給特定存儲庫。

57

一旦某個密鑰作爲部署密鑰附加到一個回購協議,它就不能在另一個回購協議中使用 。如果你遇到了此問題而設置 了部署鍵,那麼你就需要修改您的遙控器和設置您的 ~/.ssh/config文件使用不存在 github.com主機名 SSH就能用於爲您的 存儲庫選擇正確的ssh部署密鑰。

# first we remove the origin 
$ git remote -v 
origin [email protected]:username/foo.git (fetch) 
origin [email protected]:username/foo.git (push) 
$ git remote rm origin 

# here we add a new origin using a host nickname called 
# foo.github.com that we will reference with a Host stanza in our 
# ~/.ssh/config to specify which key to use with which fake hostname. 
$ git remote add origin [email protected]:username/foo.git 
$ git remote -v 
origin [email protected]:username/foo.git (fetch) 
origin [email protected]:username/foo.git (push) 

生成您的存儲庫中的部署重點,並將其命名它的東西 合理,如:

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa-foo -C https://github.com/username/foo 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa-foo. 
Your public key has been saved in /home/username/.ssh/id_rsa-foo.pub. 
The key fingerprint is: 
c0:ff:ee:34:24:11:5e:6d:7c:4c:b1:a0:de:ad:be:ef https://github.com/username/foo 
The key's randomart image is: 
+--[ RSA 2048]----+ 
| E o..o.oo. | 
| M o o o .+CoW | 
| + o = o. .. | 
| . . +   | 
|  S  | 
|  o .  | 
|  +  | 
|  . o  | 
|  ..o.  | 
+-----------------+ 

一旦你 added the deploy key 然後你會需要以下節添加到您的~/.ssh/config文件:

Host fake-hostname-foo.github.com 
    Hostname github.com 
    IdentityFile ~/.ssh/id_rsa-foo 

現在你可以用它來測試它:

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

很好的答案,非常有幫助。工作完美。謝謝 – 2012-12-18 20:31:37

+1

我不明白什麼是假的?您生成另一個密鑰。每一秒都被稱爲「假」嗎? – 2016-07-12 20:45:46

+0

@LittleAlien'foo.github.com'中的'foo'主機名是假的(也就是不存在的)部分。你可以爲主機名填補任何你想要的東西。我已經用'fake-hostname-foo.github.com'來澄清這個條目,而不是'foo.github.com'。 – aculich 2016-07-14 01:02:11

11

我找到的最簡單的解決方案是概述here

1),輸入以下命令(你會爲你必須然而,許多鍵)做到這一點:

SSH-凱基-t RSA -C 「[email protected]

2)當提示下面的語句鍵入一個唯一的名稱(即,foo1_rsa)時,將在當前目錄中創建該文件,如果要整理,可能需要將其移至.ssh:

輸入要保存的文件關鍵(/Users/you/.ssh/id_rsa):按回車鍵]

3)更新您的SSH配置文件:

VI的〜/ .ssh/config中

可能爲空:

Host cheech github.com 
Hostname github.com 
IdentityFile ~/.ssh/foo1_rsa 

Host chong github.com 
Hostname github.com 
IdentityFile ~/.ssh/foo2_rsa 
1

使用我的小型npm模塊github-add-key可以輕鬆管理多個GitHub部署密鑰。它使用this偉大的答案描述的方法,和所有你需要的是

$ github上加鍵搶/衝

在你的本地克隆 rob/chong

,並按照簡單的自動化過程。

0

雖然Pimkin的想法是偉大的,我不想安裝node只是這一點,所以我創建類似於bash東西:

https://gist.github.com/blvz/8eeebacae11011c25fc79eff12f49ae9

安裝和使用:

curl https://gist.githubusercontent.com/blvz/8eeebacae11011c25fc79eff12f49ae9/raw/6f2f7f3709a0fe852d8a3a5bb125325e3ffbc7d8/gh-deploy-clone.sh > /usr/local/bin/gh-deploy-clone 
chmod +x /usr/local/bin/gh-deploy-clone 

gh-deploy-clone user/repo 

# You can also give it a name, in case 
# you have multiple deploy targets: 

gh-deploy-clone user/repo staging 
1

我知道這是5歲以上,但沒有公認的答案這個受歡迎的問題,所以這裏是我認爲考慮清潔度和未來可讀性的最佳方式:


ADD A部署用戶給你的團隊

第1步:創建您的組織的域新新的電子郵件地址部署用戶。類似於[email protected]

第2步:使用該郵箱來創建一個新帳戶GitHub的(GitHub calls these "machine users")給它一個用戶名像部署,ExampleOrganisation所以它的作用是顯而易見的。

步驟3:在您的服務器名爲上的用戶「部署」用這樣的命令:

useradd -d /home/deploy -m deploy 

產生部署@服務器 SSH密鑰,指定沒有密碼和/home/deploy/.ssh/id_rsa作爲文件位置:

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

添加的小故事nts /home/deploy/.ssh/id_rsa.pub作爲您的新的SSH密鑰部署 - 示例組織 GitHub帳戶:轉至設置> SSH和GPG密鑰>新SSH密鑰

第4步:創建組織中的一隊叫像「只讀部署用戶」,您的新用戶添加到團隊和給球隊讀訪問將被部署在任何回購協議。 (如果你沒有一個組織帳戶,您仍然可以授予該用戶對多個專用回購接入)

第5步:添加您自己的個人計算機的SSH密鑰部署用戶的授權密鑰文件(/家/deploy/.ssh/authorized_keys),以便部署代碼時您(或您的部署腳本)可以登錄爲部署

熱潮!就是這樣...你現在有一個乾淨的自我記錄流程。


P.S.我嘗試了一下aculich的高票,但是它覺得骯髒與假主機名亂搞,我想,如果我在幾年後回來,我會很容易找出我做了什麼來創建所有的關鍵,並瞭解如何該SSH配置文件使這些有趣的不存在的遠程地址工作?可能不會!一個部署用戶的

優勢,較假主機名的方法:

  • 沒有黑客!它是具有明確名稱的標準用戶帳戶,通過真實的主機名訪問回購站。
  • 少了幾個鍵。
  • 如果/當您確實遷移到其他服務器時,很容易爲您的Deploy用戶提供所有帳戶的帳戶,只需向其GitHub帳戶添加一個新密鑰,她在新服務器上的帳戶就可以部署代碼。
  • 部署用戶只具有低權限僅對組中列出的Repos進行只讀訪問,並且您的個人SSH密鑰將保留在服務器外部,因此如果某位討厭的人無法訪問服務器,他們無法對其進行破壞所有的回購也是如此。
  • 部署工具配置文件(例如Capistrano)不會弄髒包含那些令人困惑的虛擬主機名稱。 (這是當他們開始傳播到服務器之外,我真的變得不習慣這種方法)。
  • 如果你忘記了你在多年的時間裏做了這些事情,文件的所有權將導致你部署用戶ls -la, SSH密鑰會引導您使用GitHub賬戶名ssh -T [email protected],希望您能夠再次加速。
  • 最後...這是由GitHub推薦的方法。
相關問題