添加RSA密钥而不覆盖原有密钥

30
我想为我想要SSH进入的家庭服务器生成一组密钥,因此我执行ssh-keygen -t rsa,但是然后我收到一条消息:id_rsa already exists. Overwrite (y/n)? 嗯,我不想覆盖现有的密钥,因为我现在使用这些密钥来SSH进入我的大学服务器,每次想要切换都需要再做一遍这些麻烦的事情。有没有简单的方法来追加这些密钥?
我尝试按照某个教程(我找不到了)建议的使用cat命令的方法,但我很困惑。似乎解决方案是非常简单的,但我只是看不到。
5个回答

32
您可以通过在家目录下的 .ssh 目录中使用配置文件来实现此操作:
  1. Generate your key as usual:

    ssh-keygen -t rsa
    
  2. Don't overwrite the default (usually id_rsa). Instead, create a new name. This will create a separate file with your key.

  3. In ~/.ssh create a config file with the following content:

    Host * (asterisk for all hosts or add specific host)
      AddKeysToAgent yes
      UseKeychain yes
      IdentityFile <key> (e.g. ~/.ssh/yourKey)
    
  4. The key is now added to the keychain and can be used!

您可以在配置文件中使用多个IdentityFiles(例如Mac):

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa_private_server
  IdentityFile ~/.ssh/id_rsa_github
  IdentityFile ~/.ssh/id_rsa_work_server

这个能够使用多个ssh密钥(身份验证文件)吗? - Iulian Onofrei
对我来说没问题 :-) 我有三个不同的ssh密钥用于三个独立的服务器,我可以使用标准的ssh myname@myserver语法无缝连接到任何一个服务器。如果您使用ssh -v(详细模式),您可以看到它如何尝试在您的.ssh文件夹中找到所有身份文件。 - GreensterRox
那么,你会为 IdentityFile 字段指定哪一个呢? - Iulian Onofrei
1
您可以使用IdentityFile指定多个行,详见我的更新答案。 - GreensterRox
感谢@GreensterRox - 这很好用,帮了我大忙。但是,出于某种奇怪的原因,当我更改使用不同密钥的服务器时,我的终端标题仍然显示为root@previousServerName,尽管一切正常。 - Shawn Frank

10

您可以在两个服务器上使用相同的公钥。如果您不想这样做,只需在ssh-keygen提示您之前指定与~/.ssh/id_rsa 不同的位置,并将其与代理一起使用:

% ssh-agent sh  # Replace with your favourite shell.
$ ssh-add ~/.ssh/id_rsa_2
$ ssh somewhere
$ exit
%

ssh-agent 也可以在不启动新 shell 的情况下使用,只需执行 eval $(ssh-agent) 命令即可。


在这种情况下,我正在尝试从我的主机计算机(Windows 7,通过Cygwin,尝试复制到Debian)执行以下操作:ssh-copy-id -i"C:/Users/FirstName LastName/.ssh/id_rsa.pub" user@hostname,但它对我很生气,并说ERROR: failed to open ID file 'C:/Users/FirstName' - itsmichaelwang
@Zapurdead:尝试转义空格并使用单引号:'C:/Users/FirstName\ LastName/.ssh/id_rsa.pub'。(单引号并不是必需的,但最好不要双倍使用\。)甚至可以使用ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostname - Ry-
我尝试了第二个选项,但是出现了 ERROR: failed to open ID file '/home/FirstName' 的错误。它是不是认为我的Windows电脑是Linux? - itsmichaelwang
@Zapurdead:看起来是这样的;你应该升级到最新的OpenSSH,6.6版。 - Ry-
@MattO'Brien:它存储解密后的私钥,这样你就不需要每次都输入密码来使用它们。请参阅man ssh-agent - Ry-
显示剩余3条评论

6
我和你有一样的问题,我解决了它。
在终端中输入:
"Enter file in which to save the key (/home/you/.ssh/id_rsa): "
不要按下 Enter 或写入 /home/you/.ssh/id_rsa,而是写入 /home/you/.ssh/id_rsa1

1
你可以按照 minitech 的建议,在两个服务器上使用相同的SSH公钥。要这样做,请在文本编辑器中打开文件~/.ssh/id_rsa.pub,粘贴该文件的内容而不添加任何新空格或新行,并将其添加到您想连接的服务器上。如果您在服务器上的用户名为"user",IP地址为123.45.56.78,则使用命令"ssh-copy-id user@123.45.56.78",或者您可以使用:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

1
如果我记得正确的话,我通过卸载Cygwin并使用命令行来解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接