Ed25519密钥比RSA更强在于其基于椭圆曲线算法,签名更快、验签更安全、私钥固定32字节且无弱参数可调;OpenSSH 6.5+原生支持,但旧系统如CentOS 7默认不兼容,需确认服务端支持并正确配置密钥与权限。

Ed25519密钥比RSA强在哪?为什么现在该换
Ed25519不是“更长的RSA”,而是完全不同的椭圆曲线算法,签名更快、验签更安全、私钥固定32字节——没弱参数可调,也没ssh-keygen -b 8192这种伪安全感。OpenSSH 6.5+原生支持,现代服务器基本都认;但老系统(如 CentOS 7 默认的 OpenSSH 6.4)会直接拒绝连接,报错no mutual signature algorithm。
常见错误是生成后发现ssh连不上旧设备,却误以为密钥“有问题”。其实只是服务端不支持——得先查sshd -V或ssh -Q sig确认对方支持ed25519。
用 ssh-keygen 生成 Ed25519 密钥的正确命令
别加-t rsa -b 4096,也别碰-N设空密码(除非你真敢裸奔)。默认行为最安全:
-
ssh-keygen -t ed25519 -C "your_email@example.com"——-C是注释,不是必需,但能帮你区分密钥用途 - 回车接受默认路径
~/.ssh/id_ed25519,别手动改名成id_rsa,否则ssh可能跳过它 - 输两次密码(passphrase),别留空;用
ssh-add托管,别图省事关掉加密
生成完立刻检查:ls -l ~/.ssh/id_ed25519*,应该看到私钥权限是-rw-------,公钥是-rw-r--r--。如果私钥是-rw-rw-rw-,ssh会直接拒用,报错UNPROTECTED PRIVATE KEY FILE!。
公钥怎么用?别直接 cat ~/.ssh/id_ed25519.pub
OpenSSH要求公钥必须是单行、无换行、末尾带空格分隔的注释。手抖复制多了空格或换行,authorized_keys就失效,现象是“密码能登,密钥登不了”,且ssh -v里只显示Authentication refused,不告诉你哪错了。
安全做法是用ssh-copy-id自动部署:
-
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host—— 它会校验格式、追加到authorized_keys、修权限 - 手动操作时,用
cat ~/.ssh/id_ed25519.pub | tr -d '\n'确认是单行,再粘贴;别用图形界面编辑器开authorized_keys,容易插BOM或换行符
验证是否生效:ssh -o PubkeyAcceptedAlgorithms=+ssh-ed25519 user@host。万一服务端OpenSSH太老,这参数能强制启用(仅临时调试用)。
多密钥管理:别让 id_ed25519 被所有主机共享
一个密钥用 everywhere 是最大风险点。一旦某台机器被黑,所有服务都失守。实际中该按场景分密钥:
- 工作服务器:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519-work -C "work" - GitHub/GitLab:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519-git -C "git" - 在
~/.ssh/config里绑定 Host 和 IdentityFile:
Host github.com IdentityFile ~/.ssh/id_ed25519-git Host work-server.example.com IdentityFile ~/.ssh/id_ed25519-work
这样ssh git@github.com自动用id_ed25519-git,不用每次-i指定。漏配IdentityFile时,ssh默认只试id_rsa和id_ed25519,不会遍历所有密钥——这点常被忽略,导致“明明生成了就是连不上”。


















