![如果在服务器端创建 SSH 密钥,是否有区别?](https://linux22.com/image/1352547/%E5%A6%82%E6%9E%9C%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E5%88%9B%E5%BB%BA%20SSH%20%E5%AF%86%E9%92%A5%EF%BC%8C%E6%98%AF%E5%90%A6%E6%9C%89%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
我有一台运行 Ubuntu 的服务器。我安装了 openssh-server 并想使用 ssh 密钥进行登录。除了一件事之外,一切都正常。Ubuntu 的社区网站上写道“这大大提高了您的安全性,但使您无法在未经 PC 预先批准的情况下从朋友的 PC 连接到自己的计算机 [...]”(https://help.ubuntu.com/community/SSH/OpenSSH/Configuring)。
我在我的服务器/服务器端创建了密钥对。然后我将公钥添加到authorized_keys并将私钥传输到我的客户端电脑并从服务器中删除私钥。
我可以用私钥从我的电脑登录。但我也可以用这个私钥从任何其他电脑或智能手机登录。
这种行为正确吗?因为上面的引文说,我必须批准每个新客户,但实际上我并没有这样做。
答案1
一般情况下,应在您要使用的客户端上生成私钥/公钥对,并且每个客户端都应有自己的私钥/公钥对。私钥仅供客户端使用,公钥可与您要访问的服务器共享。
通常服务器应该只存储公钥,每个公钥都表示“具有相应私钥的客户端可以访问这台机器”。
您不应该有多个拥有相同私钥的客户端。
如果任何一个客户端被攻陷,那么您的所有客户端都会被攻陷,您必须删除私钥并在系统中重新生成新密钥。这就是为什么每个客户端一个私钥/公钥对是好的,因为如果任何客户端被攻陷,那么服务器只需要从文件中删除一个公钥authorized_keys
,就可以删除使用该私钥的访问权限。这似乎有点奇怪,但在实践中,如果只有一个客户端被攻陷,您不想拒绝所有连接。(回答您的子问题,这种行为是正确的,但这不是你应该允许发生的事情。)
最后,由于您拥有服务器,因此在您的服务器上生成密钥对然后进行传输是“可以的”,但一般来说,当一个人并不总是拥有服务器时,他们会自己生成密钥对并将公钥发送到他们想要访问的服务器,系统管理员处理各种验证过程以确保他们添加了他们想要允许的客户端。
答案2
正如 Ubuntu 社区所述,仅当您禁用密码验证以便只能通过私钥进行连接时,该方法才会增加您的安全性。
如果您禁用密码验证,则只有您特别批准的计算机才可以连接。这大大提高了您的安全性,但使您无法在未经预先批准的情况下从朋友的 PC 连接到自己的计算机,或者在您不小心删除密钥时从自己的笔记本电脑连接到自己的计算机。
要禁用密码验证,请在 sshd_config 文件中查找以下行:
#PasswordAuthentication 是
将其替换为如下行:
密码验证否