为什么 SSH 密钥认证比密码认证好?

Boo*_*aka 47 security ssh

这与其说是技术问题,不如说是概念性问题。我知道 SSH 密钥中使用的密码学比普通密码强得多,但我不明白为什么它被认为更安全。

我读过的大多数教程都建议使用 SSH 密钥身份验证而不是密码身份验证。但我的理解是,任何有权访问预先批准的客户端计算机的人都将能够连接到服务器,这意味着 SSH 密钥提供的安全级别仅与物理安全级别一样强客户端机器。

例如,如果我在我的手机上设置了一个 SSH 密钥来连接到我的家用机器,如果我丢失了我的手机并且有人设法解锁它,他们将能够连接到我的家用机器。我知道然后我可以从我的家用机器上取下我手机的钥匙,但是我很容易受到攻击,直到我意识到客户端设备已经丢失/被破坏。

我是否误解了什么,或者这些是有效的担忧?

Red*_*ick 40

如果您的 SSH 服务允许基于密码的身份验证,那么您的 Internet 连接的 SSH 服务器将被试图猜测用户名和密码的僵尸网络日夜攻击。僵尸网络不需要任何信息,它可以尝试流行的名称和流行的密码。有很多人叫约翰,密码是 qwerty123。除此之外,这会阻塞您的日志。

如果您的 SSH 服务只允许公钥身份验证,则攻击者需要一份与存储在服务器上的公钥相对应的私钥副本。他们不能只是进行随机攻击,他们必须事先了解您的用户,并且必须能够从您的 SSH 服务器的授权用户的 PC 上窃取私钥。

私钥通常受长密码保护的事实是次要的。

更新:

正如评论指出的那样,并且正如我所经历的那样,将您的 SSH 服务从端口 22 移动到一个高编号的端口会使日志中出现的未经授权的登录尝试次数产生巨大差异。这是值得做的,但我确实认为它是一种默默无闻的安全形式(一种虚假的安全感)——僵尸网络迟早会实施缓慢的隐蔽端口扫描,否则你将成为故意的目标。最好做好准备。

我总是使用长密码来保护我的私钥,我想这对于更容易丢失或被盗的移动设备尤其重要。

另外,http://xkcd.com/538/

安全

  • +1 除了公钥身份验证不会为您的日志被试图连接的机器人堵塞做任何事情。要阻止这种情况,请在高端口(即 9876 而不是 22)上运行您的 SSH 服务器。然后如果他们想攻击你,他们必须先对你进行端口扫描,而机器人通常不会浪费那么多时间...... 22 上有很多 SSH 服务器。 (8认同)
  • 你不是在开玩笑日志大小 - 我的 /var/log/secure 从*兆字节*的登录尝试到千字节(只有我的登录记录)。 (3认同)
  • @ExUmbris 而不是更改端口,您应该考虑使用 [fwknop: Single Packet Authorization and Port Knocking](http://www.cipherdyne.org/fwknop/)。这里的好处应该是显而易见的:当你不允许任何人看到端口在任何地方打开时,除非他们通过 SPA 敲门获得了对端口的访问权限,那么他们甚至无法尝试使用 nmap 和利用它。这比通过默默无闻的简单安全性要好得多。 (3认同)
  • +1 有趣,我使用基于密码的身份验证已经运行了 10 年了.. 哈哈.. 当然,我公开暴露的 ssh 端口永远不会是端口 22。认为僵尸网络会端口扫描我并试图破坏每个端口可以​​吗??好资料,谢谢。 (2认同)

Mat*_*les 9

其逻辑是 SSH 密钥的组合比密码多得多,因此更难猜测。使用 SSH 密钥还允许您禁用密码身份验证,这意味着大多数在 Internet 上进行的自动攻击将毫无用处。

在物理安全方面,如果设备丢失或被盗,保存密码与在设备上拥有未加密的 SSH 密钥之间没有区别。你唯一的优势是没有人知道你的密码,理论上你可以确保所有设备都有不同的 SSH 证书,这样你就可以为你的手机禁用一个。

我相信也可以用密码保护 SSH 密钥。