我是否正确使用了 SSH 密钥?

我是否正确使用了 SSH 密钥?

我最近创建了我的密钥对通过

ssh-keygen -t rsa -f ~/.ssh/my_keyname -C pebaken

因此,我查看了.ssh位于我的主用户目录中的文件夹,发现了 2 个密钥,一个我的密钥名称.pub我的键名以及一个名为“authorized_keys”的文件夹。

我尝试使用公钥我的密钥名称.pub连接到我的虚拟机时出现错误

已断开连接:没有可用的受支持的身份验证方法(服务器发送:公钥)

我以为公钥应该是你保留的那个,私钥会留在服务器上吗?

然后我尝试了不使用任何扩展的密钥,将其放入 PuttyGen 中,并立即收到消息

成功导入外密钥(OpenSSH SSH-2 私钥(旧 PEM 格式))。

要将此密钥与 Putty 一起使用,您需要使用“保存私钥”命令将其保存为 Putty 自己的格式。
所以我毕竟在使用私钥,因为它起作用了,并且我成功连接到了我的虚拟机。

答案1

我以为公钥应该是你保存的,而私钥将保留在服务器上

在你使用基于密钥的身份验证登录 SSH 服务器(通常是远程的、外部的、不受信任的)的情况下,你的私钥是你的秘密,属于你机器上的帐户,即 SSH客户

通常,您会在(未来的)SSH 客户端上生成密钥对,然后将公钥分发给一台(或多台)服务器。服务器用于authorized_keys存储您的公钥。这样,您最秘密的私钥(my_keyname就您而言)就永远不会离开您自己的机器。

虽然不是很清楚,但我认为您在计划用作服务器的机器上生成了密钥对。

私钥会留在服务器上吗?

它应该保留在生成的位置,但它应该首先在客户端生成。PuTTY 是一个 SSH 客户端。有一个名为 PuTTYgen 的配套工具可以生成密钥。


回答后续问题(来自 OP 的评论):

我假设当我使用 OP 中提到的命令创建密钥时,它会创建公钥和私钥

正确的。

... 我将使用公钥并从此访问服务器。

您的公钥应该是……公开的。您可以将其分发到世界各地的服务器,这样他们就能知道您就是您。要做到这一点,您需要使用相应的秘密私钥。

回到我最初的问题,我是否正确使用了密钥?或者我是否抓取了私钥并将其用作访问密钥?

使用你的私钥作为访问密钥。所以,你使用的密钥是正确的现在,但您在客户端-服务器设置的“错误”端生成了它们,因此您需要从一台机器“抓取”私钥到另一台机器。通常私钥不需要传输,因为精通 SSH 的用户会生成一个密钥对,私钥应该保存在该密钥对中,然后将公钥传输到其他机器。


我发现有一条评论(现已删除)非常具有误导性。它不是来自 OP,并且可能很容易让 OP(或任何其他用户)感到困惑,因此我在这里解决它。

应该在服务器上创建公钥和私钥,然后在客户端上使用公钥

应生成一个密钥对,其私人的密钥将被使用。从技术上讲,可以在其他地方生成密钥,然后将每个密钥复制到最终应该在的位置(毕竟它们只是文件),但关键是您的私钥应该是私有的,即只有一台机器/帐户知道。在机器之间复制私钥违反了此规则。在这种情况下,私钥用于对客户端(PuTTY)进行身份验证,因此它从一开始就应该存在于客户端机器上。

这允许具有私钥(用于解密数据)的服务器与加密数据(使用公钥)的客户端进行通信。

不。这些密钥用于身份验证,即证明您就是您声称的那个人。加密是单独的事情,它由基于会话的对称加密密钥执行。

为了验证自己的身份,客户端需要拥有自己的私钥,而服务器事先知道公钥。这里应该在客户端计算机上创建密钥对并分发私钥。

但服务器有它的自己的私钥(通常在 中/etc/ssh/,系统范围),当任何客户端首次连接时,相应的公钥将被推送到客户端并存储在 中known_hosts。这样,客户端将来就可以知道这个特定的服务器与平常是同一个服务器。如果客户端再次连接并且服务器无法使用同一个密钥进行身份验证,则会警告(客户端)用户,这可能表示 MITM 攻击。

私钥(用于解密数据)[…] 加密数据(使用公钥)

这里不是这种非对称加密。而是在 PGP/GPG 中:您使用公钥加密,因此只有私钥的所有者才能解密(无论如何过于简单,但这是概念)。在这种情况下,任何人都可以加密,因为公钥是众所周知的。情况可能正好相反:您使用自己的私钥加密,任何人都可以解密并确保消息确实来自您。

但 SSH 并非如此。这里使用密钥对来验证相关方,然后对称加密开始发挥作用。

相关内容