2016-08-01 30 views
1

我想克隆一個開放的公共倉庫到不同的目錄。要在命令行裏這麼做I型:爲什麼我可以從命令行克隆而不是bash腳本?

git clone [email protected]:computersarecool/dotfiles.git documents/gitprojects/dotfiles

其中工程。

但是,現在我想從bash腳本中完成。在腳本我有字面上完全相同的代碼:

#!/bin/bash 
git clone [email protected]:computersarecool/dotfiles.git documents/gitprojects/dotfiles 

,但現在我得到一個錯誤:

Permission denied (publickey).            
fatal: Could not read from remote repository. 
Please make sure you have the correct access rights and the repository exists. 

任何人都可以解釋這個問題給我嗎?我甚至不明白爲什麼它首先要求公鑰,因爲回購是開放的。

+0

你是用'sudo'做這個還是作爲一個不同的用戶或者''cron'或者其他? –

+0

我以'sudo'的身份運行bash腳本!有沒有辦法解決這個問題? – Startec

+0

'git clone [email protected]:...'通過SSH連接。它必須在遠程SSH守護進程**之前進行身份驗證**它能夠與任何特定的git進行通信,因此無論是否驗證了repo都是完全不相關的:它尚未完成傳輸層協商和身份驗證當它失敗時,所以是否有任何類型的應用層訪問控制是沒有意義的。 –

回答

1

如果這的確是一個公共開放式回購,使用https而不是使用ssh:

#!/bin/bash 
git clone https://github.com/computersarecool/dotfiles.git documents/gitprojects/dotfiles 

如果你想堅持到SSH,你應該讓的ssh-agent知道你id_rsa鍵:

#!/bin/bash 
eval `ssh-agent -s` 
ssh-add /home/<Your username>/.ssh/id_rsa 
git clone [email protected]:computersarecool/dotfiles.git documents/gitprojects/dotfiles 

添加您的用戶名(並檢查〜/ .ssh目錄的內容,以驗證您的私鑰被命名爲id_rsa)

+1

您仍然在使用第二個片段中的「https://」,這使得SSH密鑰設置非常實用。 –

+0

謝謝@charlesDuffy!固定 – sestus

0

你提到在運行bash腳本的須藤您的意見。

我猜測你是在沒有sudo的情況下在命令行克隆的。

錯誤消息Permission denied (publickey).基本上是說用戶試圖克隆沒有正確的SSH公鑰。這是因爲在unix系統上,每個用戶EACH和每個用戶通常都會有自己的ssh公鑰。推測你的用戶已經被配置爲使用你的公鑰對github進行身份驗證。但sudo以用戶root運行。如果您還沒有配置root用戶的公鑰以使用github賬戶(根用戶自己的github賬戶或您的賬戶),那麼它將無法通過身份驗證。

你基本上有這個2級的解決方案:

  1. 複製您的公鑰來根的.ssh目錄。這不推薦!但對於像您自己的筆記本電腦這樣的單用戶機器來說,這樣做的安全風險很小。

  2. 爲root創建一個公鑰並用github註冊它。

或者克隆使用HTTPS而不是SSH的(推動會,雖然因爲它會要求你在你的密碼每次鍵入一個痛苦)。

另一種選擇是克隆爲自己,而不是根。

+0

你在這裏提到'公鑰',但我假設根用戶需要一個公鑰和私鑰是否正確? – Startec

+0

是的,密鑰對就是這樣工作的。但不要將私鑰暴露給其他人。 – slebetman

+0

......回覆:「推動將是一種痛苦」 - 沒有義務通過與克隆的相同網址推送。 –

相關問題