因此,我生成了一个无密码密钥对,并将其上传到我的所有远程帐户。现在我可以非常轻松舒适地登录我的所有远程帐户。恶意用户也可以(以某种方式)访问拥有私钥的我的帐户(我的家用电脑)。那么,为什么人们仍然使用无密码登录?这听起来是个糟糕的主意,把所有的鸡蛋都放在一个篮子里。我是不是变得偏执了?:-D
答案1
不太确定您在这里寻找什么;“无密码”登录(私钥上没有密码,如原始问题所述)始终是一个坏主意,而且我所见过的唯一尝试证明它们的情况(自动登录到非 shell 帐户以触发预定义的服务器端脚本,该脚本在使用该密钥登录时运行)可以用更安全的方式代替。
但是,传统意义上的“无密码”登录(使用私钥/公钥对而不是键盘交互或密码)通常要好得多,只要您可以保证私钥的安全,这通常是通过使用密码加密密钥来实现的。虽然您选择使用密码保护密钥,但就系统而言,这不是身份验证的一部分(系统只关心密钥本身,而不是您必须提供密钥的操作),所以大多数人在说“无密码”登录时指的是这个。
答案2
您不应该拥有供个人使用的无密码密钥。提出这种建议的人通常太懒了。您的私钥应该有密码,并且您应该使用 ssh-agent,这样您只需解锁一次密钥。
在某些情况下,服务需要远程非交互式访问另一服务。在这种情况下,无密码密钥可能是合适的。但此服务密钥几乎总是只用于单个服务,并且访问的帐户应该有其他保护措施。例如,您可以设置一个密钥来重新启动/管理远程系统上的某些服务。您不会为 root 帐户设置此密钥,而是将其设置为非特权帐户,然后仅通过 sudo 或其他方式授予所需的权限。
2020 年更新。这些天我使用 keepass+keeagent 作为我的 ssh 代理。单个密钥存储在 keepass 中,无需密码,但我必须提供密码才能加载保管库并启动代理。还有其他类似的基于保管库的解决方案,密钥本身没有加密,但它存储在静态加密的容器中。我认为这也相当安全。
答案3
无密码 ssh 密钥是这是一个糟糕的想法,尽管它可能比使用明文密码要好。(如果需要以非交互方式使用,这可能是一个可以接受的糟糕想法,因为没有更好的选择,但你必须保护私钥非常仔细查看;参见@Zoredache 的回答。)
对于交互式登录,最佳做法是生成密钥对使用密码,并用于ssh-agent
保存解密的私钥。您可以使用ssh-add -t ...
它使私钥在指定时间后过期。