我想使用多個私鑰來連接到不同的服務器或同一服務器的不同部分(我的用途是服務器的系統管理,Git的管理和普通的Git使用在同一臺服務器內)。我試圖簡單地堆疊id_rsa
文件中的密鑰無濟於事。在一個客戶端上使用多個SSH私鑰的最佳方法
顯然,一個簡單的方法做,這是使用命令
ssh -i <key location> [email protected]
也就是說相當繁瑣。
有關如何去做這個更容易一點的任何建議?
我想使用多個私鑰來連接到不同的服務器或同一服務器的不同部分(我的用途是服務器的系統管理,Git的管理和普通的Git使用在同一臺服務器內)。我試圖簡單地堆疊id_rsa
文件中的密鑰無濟於事。在一個客戶端上使用多個SSH私鑰的最佳方法
顯然,一個簡單的方法做,這是使用命令
ssh -i <key location> [email protected]
也就是說相當繁瑣。
有關如何去做這個更容易一點的任何建議?
從我.ssh/config
:
Host myshortname realname.example.com
HostName realname.example.com
IdentityFile ~/.ssh/realname_rsa # private key for realname
User remoteusername
Host myother realname2.example.org
HostName realname2.example.org
IdentityFile ~/.ssh/realname2_rsa
User remoteusername
等。
ssh -i ~/.ssh/xxx_id_rsa [email protected]
如果你有誤差有時更改文件的安全性有任何問題,可以幫助:
chmod 0600 ~/.ssh/xxx_id_rsa
使用ssh-agent作爲密鑰。
foo:~$ssh-add ~/.ssh/xxx_id_rsa
與添加之前,請務必測試我一路。 我在服務器上有一個不同的用戶名,所以我不得不把用戶關鍵字添加到我的文件:
Host friendly-name
HostName long.and.cumbersome.server.name
IdentityFile ~/.ssh/private_ssh_file
User username-on-remote-machine
現在你可以使用友好名稱連接:
ssh friendly-name
更多的關鍵字可以在OpenSSH man page找到。 注意:某些列出的關鍵字可能已經存在於您的/etc/ssh/ssh_config文件中。
我同意Tuomas關於使用ssh-agent。我也想添加第二個私人鑰匙工作,this tutorial對我來說就像一個魅力。
步驟如下:
$ ssh-agent bash
$ ssh-add /path.to/private/key
如ssh-add ~/.ssh/id_rsa
$ ssh-add -l
$ssh -v <host url>
例如ssh -v [email protected]
多年來一直使用'ssh-agent',我最近轉而在我的'i3' wm中使用了Gnome的'gnome-keyring'。原因很簡單:Gnome的Keyring管理器自動處理添加和刪除ssh密鑰,而不必記住'ssh-add'。此外,還提供一個密碼來解鎖它們(並在特定時間超時,以確保安全)。給他自己的。由於我在Arch上使用了gnome設置,因此我的設置一直在播放。如果您是反侏儒,請忽略此評論。 – eduncan911 2015-05-26 17:01:00
@CagatayUlubay非常感謝您的評論。它帶來了我的臉上的微笑:) – 2016-07-13 16:21:54
您可以指示ssh來嘗試多鍵入su連接時連接。方法如下:
$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on
$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$
這樣你就不必指定哪個鍵與哪個服務器一起工作。它只會使用第一個工作密鑰。
另外,如果給定的服務器願意接受密鑰,則只會輸入密碼。如上所示,ssh並沒有試圖要求密碼.ssh/id_rsa
,即使它有一個。
當然,它並不像其他答案中那樣每個服務器都配置一個配置,但至少您不必爲所有連接的服務器添加配置!
非常簡單,工作。 +1 – ddtpoison777 2016-07-12 11:50:14
這是一個針對所提問題的絕佳解決方案,但並未完全滿足提問者的需求。對我而言,這是完全正確的解決方案,它完美地滿足了「在一個客戶端上使用多個SSH私鑰的最佳方式」的需求。 – Wade 2016-08-08 17:28:15
這應該是一個被接受的答案。 – sanmai 2016-12-13 01:43:00
您可以在~/.ssh
文件夾中創建一個名爲config
的配置文件。它可以包含:
Host aws
HostName *yourip*
User *youruser*
IdentityFile *idFile*
這將允許您連接到機器這樣
ssh aws
以前的答案已經正確解釋創建一個配置文件來管理多個SSH密鑰的方式。我認爲,還需要解釋的重要事情是在克隆存儲庫時用別名替換主機名。
假設您的公司的GitHub帳戶的用戶名是abc1234。 而假設你GitHub的個人帳戶的用戶名是jack1234
而且,假設你已經創建了兩個RSA密鑰,即id_rsa_company和id_rsa_personal。所以,你的配置文件看起來象下面這樣:
# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company
# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal
現在,當你克隆庫從公司GitHub的帳戶(名爲演示),庫網址將是這樣的:
Repo URL: [email protected]:abc1234/demo.git
現在,一邊做git clone
,您應該修改上面的存儲庫URL爲:
[email protected]:abc1234/demo.git
請注意,現在如何將github.com替換爲我們在配置文件中定義的別名「company」。
同理,您必須根據配置文件中提供的別名修改個人帳戶中存儲庫的克隆URL。
我曾經遇到過這個問題,當時我有兩個Bitbucket帳戶,並且想要爲兩者存儲單獨的SSH密鑰。這對我來說很有用。
我創建了兩個單獨的ssh配置,如下所示。
Host personal.bitbucket.org
HostName bitbucket.org
User git
IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
HostName bitbucket.org
User git
IdentityFile /Users/username/.ssh/work
現在,當我不得不從我的工作帳戶克隆存儲庫 - 命令如下。
git clone [email protected]:teamname/project.git
我不得不修改此命令:
git clone [email protected]**work**.bitbucket.org:teamname/project.git
同樣從我的個人賬戶克隆命令不得不進行修改,以
混帳混帳克隆@個人 .bitbucket .org:name/personalproject.git
有關更多信息,請參閱this link。
生成SSH密鑰:
$ ssh-keygen -t rsa -C <[email protected]>
生成another SSH key
:
$ ssh-keygen -t rsa -f ~/.ssh/accountB -C <[email protected]>
現在,兩個公共密鑰(id_rsa.pub,accountB.pub)應該是存在的在~/.ssh/
目錄中。
$ ls -l ~/.ssh # see the files of '~/.ssh/' directory
使用以下內容創建配置文件~/.ssh/config
:
$ nano ~/.ssh/config
Host bitbucket.org
User git
Hostname bitbucket.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Host bitbucket-accountB
User git
Hostname bitbucket.org
PreferredAuthentications publickey
IdentitiesOnly yes
IdentityFile ~/.ssh/accountB
克隆從default
賬戶。
$ git clone [email protected]:username/project.git
從accountB
帳戶克隆。
$ git clone [email protected]:username/project.git
這個答案對於這個用例非常有用和簡單。也爲Gitlab驗證! – smonff 2017-10-09 10:57:30
在CentOS 6.5運行OpenSSH_5.3p1,OpenSSL的1.0.1e-FIPS,我重新命名我的密鑰文件,使他們都沒有默認名稱解決了這個問題。我的.ssh目錄包含id_rsa_foo和id_rsa_bar但沒有id_rsa等
鑰匙如何使用?有沒有自動檢測功能? – robsch 2017-05-22 06:44:28
查看Randal Schwartz的答案,爲給定主機選擇正確的密鑰的方法https://stackoverflow.com/questions/2419566/best-way-to-use-multiple-ssh-private-keys-on-one-client/2419609#2419609 – 2017-05-23 16:35:52
重要信息:必須啓動的ssh-agent
使用SSH-之前啓動的ssh-agent(如果它尚未運行)添加如下:
eval `ssh-agent -s` # start the agent
ssh-add id_rsa_2 # where id_rsa_2 is your new private key file
請注意,eval命令在Windows上啓動GIT bash上的代理。其他環境可能使用變體來啓動SSH代理。
謝謝Randal!我做了一些挖掘.ssh/config,並發現這一點:http://github.com/guides/multiple-github-accounts指出我在正確的方向。 – Justin 2010-03-10 19:30:43
這是一個很好的幫助(除了http://stackoverflow.com/a/3828682/169153)。如果你想使用膩子鍵請按照這裏文檔:http://blog.padraigkitterick.com/2007/09/16/using-putty-ssh-keys-with-openssh-on-ubuntu – Urda 2012-03-14 23:14:32
我覺得這個帖子非常有幫助。我在創建配置文件時犯的一個錯誤是我在.txt文件中。ssh文件夾而不是運行「touch」命令來創建配置文件。 – 2012-12-22 18:17:49