升级您的SSH密钥

2021-01-23 00:05:04

无论您是软件开发人员还是系统管理员,我打赌您都在使用SSH密钥。将您的提交推送到Github或管理Unix系统,最好的做法是通过SSH使用公钥进行此操作身份验证而不是密码。但是,随着时间的流逝,你们中的许多人都在使用较旧的密钥,并且没有意识到需要生成新的密钥来更好地保护您的私人财产。在本文中,我将演示如何过渡到Ed25519顺利输入密码,为什么要这么做,并在此过程中显示一些提示和技巧。

使用ssh-keygen -o -a 100 -t ed25519生成新密钥,指定一个强密码短语,如果需要平滑过渡,请进一步阅读。

我计划在SSH技巧和公告上发布更多信息。技巧,因此请关注我的博客以获取更多信息。这篇文章将重点介绍SSH密钥作为用户公共密钥身份验证。

如果您大约四年前使用默认选项创建了密钥,那么它可能是不安全的(RSA小于2048位)。更糟糕的是,我看到过鸣叫声,同事和朋友仍在使用DSA密钥(OpenSSH格式的ssh-dss)最近。这是一种类似于RSA的密钥类型,但限制为1024位大小,因此建议长时间使用。它显然是不安全的,出于有效原因被拒绝在最新的OpenSSH版本中(另请参见7.0的变更日志)。

令人遗憾的是,我看到了有关如何重新启用DSA密钥支持而不是转向更安全的密钥类型的帖子。确实,按照说明更改PubkeyAcceptedKeyTypes或HostKeyAlgorithms(主机密钥供以后使用)。相反,请升级您的密钥!

将DSA与使用这种钥匙的锁技术进行比较。您不会希望这种类型的钥匙来解锁前门吗?

您可能在想……我很长时间以来一直在使用我的密钥,我现在不想在任何地方更改它们。有效点,但是您不知道不必!很高兴知道您的系统上可以有多个密钥,并且SSH客户端会自动为正确的系统选择正确的密钥。

它是SSH协议的一部分,它可以提供多个密钥,而服务器会选择一个客户端来证明它具有挑战性,以证明它拥有私钥。在运行中查看它会给SSH连接增加一些冗长的细节命令(-vvv)。此外,如果您正在使用SSH代理,则可以加载多个密钥,它将发现所有密钥。

最常见的是RSA类型的密钥,也称为SSH的ssh-rsa,它非常兼容,但是如果创建的比特数很少(<2048),它也很慢并且可能不安全。您的SSH客户端可以处理多个密钥,因此请使用最新的更快的椭圆曲线加密技术,并享受它提供的非常紧凑的密钥格式!

Ed25519键很短。很短。如果习惯于在系统之间复制多行字符,那么您会惊讶于其大小。公钥只有68个字符。与安全RSA(3072+位)相比,它的身份验证速度也快得多。

使用ssh-keygen命令的-t ed25519选项可以生成Ed25519密钥。

生成密钥对时,系统会要求您输入用于加密私钥的密码。如果您丢失了私钥,则应该保护他人以防他人冒用,因为它将使用密码进行加密。为防止这种情况,应该确保防止密码短语容易被强行使用。

OpenSSH密钥生成器提供了两种抵御暴力破解密码的选项:使用新的OpenSSH密钥格式和增加密钥派生功能回合的数量,这会减慢密钥的解锁过程,但是这阻止了有效的暴力破解我也说过要对您的系统上的回合数量进行实验。大约要进行100轮回合。在我的系统上,每天使用代理解密和加载密钥大约需要一秒钟的时间。 imo。

对于ssh-keygen,对新的RFC4716密钥格式使用-o选项,并使用由bcrypt支持的现代密钥派生功能。-a&lt; num&gt; &lt; num&gt;的选项轮数。

OpenSSH联机帮助页并没有真正说明&#39; new&#39;格式。我发现本文非常有用:&#34;新的openssh密钥格式和bcrypt pbkdf&#34;在www.tedunangst.com上。

在所有密钥类型上使用相同的密码短语,可以更方便地获利(另请参见支持多密钥的SSH客户端)。

$ ssh-keygen -o -a 100 -t ed25519生成公用/专用ed25519密钥对。输入密码(无密码时为空):再次输入相同的密码:您的标识已保存在/home/gert/.ssh/id_ed25519中。您的公钥已保存在/home/gert/.ssh/id_ed25519.pub中。密钥指纹是:SHA256:gert @ hostname密钥的randomart图像是:[...]

请注意&#39;您的行已保存在/home/gert/.ssh/id_ed25519'中。您当前的RSA / DSA密钥位于同一〜/ .ssh文件夹中。您可以将〜/ .ssh / id_ed25519.pub中的公钥复制到目标主机以进行身份​​验证。

SSH客户端应用程序会自动检测默认路径上可用的所有密钥,包括通过ssh-add的SSH代理,因此,如果您之前使用过ssh / scp / rsync之类的应用程序...

它现在将为服务器提供多个公钥,并且服务器将请求拥有证明以提供匹配条目以进行身份​​验证。并且您每天使用ssh-add命令不会更改并自动发现Ed25519密钥:

它不仅发现了两个密钥,还通过输入一个密码短语来加载它们(因为它相同)!

现在我们已经实现了一个非常重要的目标。在您的日常工作中无需进行任何更改,我们就可以缓慢地更改远程主机上的现有配置以接受Ed25519密钥。与此同时RSA密钥仍然可以使用。

如果您担心这会更改您的密钥,请不要担心。密钥对的私有部分使用仅在计算机本地存在的密码加密,因此您可以随时更改它。建议以防万一密钥文件被不正确的人滥用,请重复所有密钥文件以确保新的密钥格式具有100次bcrypt KDF验证:

到目前为止,使用Ed25519可以(而且应该)在大多数情况下都可以使用,但是传统系统可能到目前为止还不支持它们。最好的后退是为此提供强大的RSA密钥对。

尽管OpenSSH客户端支持多个RSA密钥,但它需要配置/命令行选项来指定路径,因此它很容易出错。相反,我建议就地升级现有密钥以简化操作根据当前RSA密钥的强度(密钥大小),您可以紧急或舒适地进行迁移。

如果您仍然有一个较弱的RSA密钥,请将其移出标准路径,并生成一个4096位大小的新密钥:

$ mv〜/ .ssh / id_rsa〜/ .ssh / id_rsa_pubacy $ mv〜/ .ssh / id_rsa.pub〜/ .ssh / id_rsa_legacy.pub $ ssh-keygen -t rsa -b 4096 -o -a 100

完成所有远程目标上的转换后,您可以回到方便状态,让它自动发现新的RSA和Ed25519密钥;只需省略keyfile参数。

自OpenSSH 6.5开始提供支持,并已在Unix世界操作系统的工作站中广泛采用.Ubuntu 14.04 +,Debian 8 +,CentOS / RedHat 7+等都已支持(如果您有Mac OS X的详细信息,请下一行,无法通过快速搜索找到它)。某些软件(例如自定义桌面密钥代理)可能由于多种原因而不喜欢新密钥(例如,有关Gnome密钥,请参见下文)。

顺便说一句,Github也运行得很好。但是不幸的是,Launchpad和Gerrit代码审查似乎需要RSA密钥.Windows上的PuTTY吗?见下文。

至少在Ubuntu Unity中使用的Gnome密钥无法读取新的RFC4716格式密钥,但报告成功,这是有bug的。更多详细信息请参见我的AskUbuntu问题与解答。我建议禁用SSH代理使用的Gnome密钥环,请改用普通的OpenSSH代理。

抱歉,我没有使用PuTTY,但请确保先进行升级。根据愿望清单的内容,此页面建议从2015年末版本开始支持Ed25519。通常来说,我对这样的速度不太满意实施安全功能。

我们已经采取了一些重要的步骤,但是离最终的安全性还很遥远。在处理高度安全的环境时,我会强烈反对像本文所述的那样使用密钥,因为这会在内存中保存未加密的私钥。相反,请使用硬件安全性(智能卡)来避免密钥甚至从内存转储中泄漏出来。本文未对此进行介绍,主要是因为它需要您购买的硬件设备,其次是因为限制取决于设备。一个不错的解决方案可能是利用您PC上已经内置的TPM,但这绝对值得您关注。

我计划编写更多有关如何加强SSH的内容;自定义主机密钥,自定义DH模数,强密码(例如chacha20-poly1305)和安全的KeyExchange / MAC。目前,这已经是一个不错的资源:https://stribika.github.io/2015/01/04/secure-secure -shell.html

🔑升级您的SSH密钥! (博客)使用Ed25519,了解过渡和其他技巧&amp;技巧。 https://t.co/KDY2Ufh5FC

-Gert van Dijk⚠️(@gertvdijk)2016年9月23日