为什么 ssh -i 仍然提示输入密码?

为什么 ssh -i 仍然提示输入密码?

我对su用户有权限。我进入它的目录并从 获取公共 ssh 密钥。我也将其添加到.foousertarget.host~/.sshid_rsa.pubauthorized_keys

我想ssh从另一台服务器启用。我去了另一台服务器并保存了公钥/path/to/foouser.pub并尝试运行:

ssh -i /path/to/foouser.pub[电子邮件受保护]

但仍然提示输入密码。为什么? SSH 主机上 foouser 的 ssh 配置中是否需要更改某些内容?

答案1

您需要使用带有标志的私钥,而不是公钥-i

由于您的公钥无法通过基于同一公钥的其他服务器发送的质询(非对称加密,要求您使用私钥来回答基于公钥的质询),因此当密钥身份验证失败时,ssh将继续尝试其他身份验证方法,包括密码。


非对称加密的工作方式是私人的钥匙被保留私人的。 不应与任何人共享;它甚至不应该从创建它的主机上复制。 (当然不应该通过电子邮件发送!)

民众钥匙可以发送到任何地方。

用公钥加密的数据只能用私钥解密,用私钥加密的数据只能用公钥解密。

从数学上讲,在 RSA 算法中,两个密钥之间没有功能差异,只是其中之一必须保密。然而,在实际的 SSH 实现中,这两个密钥是有区别的并且看起来不同,因此请确保:

  • 您的公钥(而不是私钥)被添加到目标服务器上的“授权密钥”文件中,并且
  • 您将您的私钥传递给ssh -i. (如果您将公钥传递给 也没有什么坏处-i,只是不起作用。)

如果您曾经分享过您的私人的密钥或将其复制到目标服务器,生成一个新密钥并删除旧密钥。


我只是更仔细地观察了您执行的具体步骤。您需要备份并重新开始。此时,您应该删除foouseron 的密钥对target.host,并从您放入的任何授权密钥文件中删除该公钥。永远不要复制私钥。

注意通过 SSH 进入[电子邮件受保护]来自 someother.host 甚至不需要 foouser 有密钥对。

什么需要生成一个密钥对在 someother.host 上对于您将使用 SSH 的用户数从,并且你把民众该对的密钥进入~foouser/.ssh/authorized_keyson target.host


一步一步简单,但省略了您现在应该执行的安全清理步骤因为您复制了私钥。设置连接的简单方法:

  1. startserver.host,作为用户startinguser,运行ssh-keygen。您可以设置密码,也可以不设置密码;由你决定。 (密码短语增加了额外的安全性,以防私钥受到威胁。)只需在每次提示时按 Enter 键即可创建具有默认设置的密钥对,这很好。
  2. 运行cat ~/.ssh/id_rsa.pub显示民众钥匙。
  3. 复制命令的输出到另一台主机上( target.host) 并将其附加到~foouser/.ssh/authorized_keys.
  4. startserver.host,跑。你不需要旗帜。ssh [email protected]-i

回答评论:

如果私钥永远不应该被复制——你能解释一下ssh -i当它需要私钥时有什么好处吗?

您在主机上生成密钥对从中你想要ssh到其他服务器。

您的私钥保留在该服务器上,并且永远不会复制到其他地方。 (也许它在你的备份中。也许不是。但是对于使用,它从未被复制到其他地方。)

你的民众密钥被复制到您想要登录访问的每台服务器上,并且特别附加到您希望能够在该服务器上登录的用户的主目录中的目录authorized_keys中的文件中。.ssh

通过此设置(默认设置),您将永远不需要-i.但是,您可能有多个密钥对在您自己的计算机上您用于不同目的(不同的服务器组)。重点-i是能够指定一个备用位置,从中读取您的私钥身份。您可以使用cd ~/.ssh; mv id_rsa id_rsa.bak; mv id_rsa.other id_rsa和 不ssh ...使用来实现相同的效果-i。不过-i比较方便。

相关内容