2022 年程序员一定要做的一件事情 - 更换你的 SSH 公钥算法

# 前言

常见的 SSH 登录密钥使用 RSA + SHA-1 算法。RSA 经典且可靠,但性能不够理想。

只要你的服务器上 OpenSSH 版本大于 6.5(2014 年的古早版本),就可以利用 Ed25519 算法生成的密钥对,减少你的登录时间。如果你使用 SSH 访问 Git,那么就更值得一试。

Ed25519 的安全性在 RSA 2048 与 RSA 4096 之间,且性能数十倍于 RSA 算法。

# 起因

自 2022 年 4 月 21 日 Canonical 发布了 Ubuntu 22.04 版本,并且将 Ed25519 加入了 SSH 登录密钥算法,禁用了 RSA 公钥算法,导致我在 iOS 上 ServerCat 应用程式的 RSA 密钥无法连接到服务器,经过排查之后发现 Ubuntu 22.04 将 OpenSSH 版本升级到 8.9,且 OpenSSH 团队宣布ssh-rsa在 8.8 版本中将默认禁用签名方案。

SSH 服务端守护进程版本

这是导致我无法使用 RSA 秘钥连接到我所有已经升级到 Ubuntu 22.04 版本的虚拟机

# 解决方案

解决方案有两种,启用过时的方案,或者是使用 Ed25519 公钥算法,后者是最为推荐的,数十倍的性能及不低于 RSA 2048 的安全性。

# 启用抛弃的 RSA 算法

使用编辑器打开远程主机上的 sshd 的配置文件,配置公钥接收 RSA 算法

1
2
echo 'PubkeyAcceptedKeyTypes +ssh-rsa' >> /etc/ssh/sshd_config
systemctl restart sshd.service

# 换用 Ed25519 公钥算法

更换算法意味着所有的机器都将要更换公钥,需要替换所有机器的 authorized_keys 文件中的可信公钥。

1
2
ssh-keygen -t ed25519 -C "your_email@example.com"
cat ~/.ssh/id_ed25519.pub

将新的公钥添加到你目标远程主机上的 ~/.ssh/authorized_keys 文件末尾

# 结语

强烈建议替换公私钥体系的算法,提高安全性的同时也换来了高性能。

Licensed under CC BY-NC-SA 4.0