问题 添加RSA密钥而不覆盖[关闭]


我想为我想要SSH的家庭服务器生成一组密钥,所以我这样做 ssh-keygen -t rsa,但后来我收到一条消息: id_rsa already exists. Overwrite (y/n)?

好吧,我不想覆盖,因为我现在使用的密钥用于SSH连接到我大学的服务器,每次我想切换时都必须再次完成所有垃圾操作。是否有一种简单的方法来附加密钥?

我尝试了一个教程(我找不到),暗示了一些关于使用的东西 cat 命令,但我很丢失。似乎解决方案非常简单,我只是没有看到。


2965
2018-06-24 17:19


起源



答案:


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

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

ssh-agent 也可以在不启动新shell的情况下使用 eval $(ssh-agent)


7
2018-06-24 17:23



在这种情况下,我试图从我的主机(Windows 7,通过Cygwin,尝试复制到Debian)执行以下操作: ssh-copy-id -i "C:/Users/FirstName LastName/.ssh/id_rsa.pub" user@hostname,但它对我生气并说'错误:无法打开ID文件'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:我不知道。反斜杠有效吗? - Ry-♦
这是不行的。看起来这是一个错误? bugs.launchpad.net/ubuntu/+source/openssh/+bug/1074798 - itsmichaelwang


答案:


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

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

ssh-agent 也可以在不启动新shell的情况下使用 eval $(ssh-agent)


7
2018-06-24 17:23



在这种情况下,我试图从我的主机(Windows 7,通过Cygwin,尝试复制到Debian)执行以下操作: ssh-copy-id -i "C:/Users/FirstName LastName/.ssh/id_rsa.pub" user@hostname,但它对我生气并说'错误:无法打开ID文件'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:我不知道。反斜杠有效吗? - Ry-♦
这是不行的。看起来这是一个错误? bugs.launchpad.net/ubuntu/+source/openssh/+bug/1074798 - itsmichaelwang


您可以通过在主目录下使用配置文件来实现此目的 .ssh 目录:

  1. 像往常一样生成密钥:

    ssh-keygen -t rsa
    
  2. 不要覆盖默认值(通常是 id_rsa)。而是创建一个新名称。这将使用您的密钥创建一个单独的文件。

  3. 在〜/ .ssh中创建一个 config 文件包含以下内容:

    Host * (asterisk for all hosts or add specific host)
      AddKeysToAgent yes
      UseKeychain yes
      IdentityFile <key> (e.g. ~/.ssh/yourKey)
    
  4. 钥匙现已添加到钥匙串中,可以使用!

-

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

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

4
2018-03-08 08:56



这是否适用于多个ssh密钥(识别文件)? - Iulian Onofrei
适合我:-)我有三个不同的ssh密钥用于三个独立的服务器,我可以使用标准无缝连接到三个服务器中的任何一个 ssh myname@myserver syntax。如果您使用ssh -v(详细),您可以看到它如何尝试.ssh文件夹中的所有身份文件。 - GreensterRox
那么,你指定哪一个 IdentityFile 领域? - Iulian Onofrei
您可以使用IdentityFile指定多行,请参阅我更新的答案。 - GreensterRox


如果我没记错的话,我通过卸载Cygwin并使用命令行修复了这个问题。


1
2018-05-20 06:20





你可以这样做 MiniTech移动 建议并在两台服务器上使用相同的SSH公钥。为此,请打开该文件 ~/.ssh/id_rsa.pub 在文本编辑器中,完全复制文件的内容而不添加任何新空格或换行符,并将其添加到要连接的服务器。如果服务器上的用户名是IP地址为123.45.56.78的“user”,请使用命令“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"

0
2018-05-24 16:18





我和你有同样的问题,我解决了它。

在终端是:

“输入要保存密钥的文件(/home/you/.ssh/id_rsa):” 

而不是打 输入 或写作 /home/you/.ssh/id_rsa, 你写 /home/you/.ssh/id_rsa1


0
2018-03-02 11:16