我有2個需要2個不同SSH密鑰的Git服務器。GIT選擇要使用的私鑰
git clone [email protected]:blahblahblah
使用~/.ssh/id_rsa
,但我需要指定使用哪個密鑰,具體取決於我連接的服務器。
什麼Git命令行參數做這項工作? (我正在運行Linux)
我有2個需要2個不同SSH密鑰的Git服務器。GIT選擇要使用的私鑰
git clone [email protected]:blahblahblah
使用~/.ssh/id_rsa
,但我需要指定使用哪個密鑰,具體取決於我連接的服務器。
什麼Git命令行參數做這項工作? (我正在運行Linux)
如果通過SSH進行連接,則密鑰將由SSH參數控制,而不是由git參數控制。
SSH在~/.ssh/config
文件中查找配置參數。修改該文件,並添加IdentityFile條目兩個混帳服務器這樣的:
Host server1.whatever.com
IdentityFile /path/to/key_1
Host server2.whatever.com
IdentityFile /path/to/key_2
This article有一些更多的細節。
這並沒有回答這個問題。問題是,當ssh處理授權時,如何給git這個參數? – keks
@Keks:你*不能*通過git命令行傳遞ssh參數。這個答案提供了一種解決方法。還有其他解決方法,例如https://git.wiki.kernel.org/index.php/GitTips#How_to_pass_ssh_options_in_git.3F。請注意,該方法也不使用命令行參數來修改ssh行爲。 –
這是真的,但是你的原始答案沒有回答這個問題。你也可以使用'ssh-agent'並使用'ssh-add',然後使用git。當git通過ssh連接時,密鑰已經啓用。你看,有幾種方式,你的原始答案只是沒有什麼幫助。 – keks
使用ssh-add path-to-private-key
它開箱即用。
一般來說,你想使用~/.ssh/config
這個。只要配對服務器地址與您要使用他們如下鍵值:
Host github.com
IdentityFile ~/.ssh/id_rsa.github
Host heroku.com
IdentityFile ~/.ssh/id_rsa.heroku
Host *
IdentityFile ~/.ssh/id_rsa
Host *
表示任何服務器,所以我用它來設置~/.ssh/id_rsa
爲使用默認密鑰。
如果您在一臺服務器(如GitHub)上有多個帳戶,並且您希望爲每個服務器另設一個私鑰,則此想法不起作用。 – Flimm
對於一個服務器上的多個帳戶看到這個答案http://stackoverflow.com/questions/3225862/multiple-github-accounts-ssh-config – lexicalscope
還有另一種可能性。這是爲了設定core.sshCommand
,例如
git config --local core.sshCommand "/usr/bin/ssh -i /home/me/.ssh/id_rsa_foo"
有一個特殊的情況時,這個策略是非常有用的:那就是當你在Github上多個賬戶,所有賬戶ssh
到Github上爲[email protected]
和它使用的ssh
鍵來確定你是哪個Github上的用戶。在這種情況下,.ssh/config
和ssh-agent
都不會做你想要的。
這應該是選定的答案。所需的配置在存儲庫中很好地本地化,需要使用不同的ssh密鑰訪問不同的git服務器。無需修改〜/ .ssh/config(甚至在GitHub上有多個帳戶的情況下甚至可以/ etc/hosts)。 –
但是,有一個問題:在配置它之前,您無法克隆回購,爲了配置它,您需要首先克隆它。或者,您可以'git init'回購,在本地配置它以使用正確的ssh命令,然後添加一個遠程(3步,相比之下,只有1個使用「git clone」)。 –
爲了克隆回購,我通過設置GIT_SSH_COMMAND環境變量來使用@Guss的解決方案。但在正常使用中,我更喜歡我的解決方案,因爲它避免了每次啓動新外殼時都必須重新導出該變量。 –
在我的方案中,類似於@Richard Smith方案(其解決方案BTW不適用於我),我需要爲不同存儲庫下的同一服務器使用不同的密鑰。
對我來說,解決方法是正確設置會話使用環境變量GIT_SSH_COMMAND
,就像這樣:
export GIT_SSH_COMMAND="ssh -o IdentitiesOnly=yes -i ~/.ssh/my-secret-identitiy"
更新:
的另一件事,這裏要注意的是,設置環境變量正確地可以是一個喧囂,所以我使用了諸如Liquid Prompt of Fish Shell之類的命令提示符修改工具來掛鉤到shell並根據當前目錄和一些規則不斷更新環境變量。例如,我所有使用Gitlab個人SSH密鑰的個人項目都在~/Documents/Projects/personal
之下,所以當shell鉤子運行pwd
並發現當前目錄位於該路徑下時,它會根據需要自動設置GIT_SSH_COMMAND
變量。
此問題在http://superuser.com/questions/232373/tell-git-which-private-key-to-use上回答。 –
[指定不使用〜/ .ssh/config的git push的SSH密鑰](http:// stackoverflow。com/questions/7927750/specify-an-ssh-key-for-git-push-without-using-ssh-config) –
[指定在使用或不使用Ruby時執行shell命令時使用的私有SSH密鑰? (http://stackoverflow.com/questions/4565700/specify-private-ssh-key-to-use-when-executing-shell-command-with-or-without-ruby) – Zaz