最近家里服务服务器Ubuntu 更新了软件,发现之前通过ssh-copy-id配置的密码也需要输入密码了。查询了很多资料才发现ssh不支持rsa登陆了。openssh觉得ssh-rsa加密方式不安全, 默认不允许这种密钥用于登陆了。
在SSH协议中,ssh-rsa签名算法是SHA1的哈希算法和RSA公钥算法的结合使用。由于目前SHA1的哈希算法容易受到攻击,OpenSSH从8.7以后版本开始默认不支持ssh-rsa签名方案。openssh更新文档
如果您是 DevOps 工程师或 Web 开发人员,您很有可能已经熟悉并每天使用 SSH 密钥身份验证。无论是登录远程服务器还是将提交推送到远程存储库。与传统的基于密码的身份验证相比,它为我们提供了更好的安全性。
要检查计算机上所有在用的 SSH 密钥,请在终端上运行以下命令:
for key in ~/.ssh/id_*; do ssh-keygen -l -f "${key}"; done | uniq
您的 SSH 密钥可能使用以下算法之一
- RSA :这取决于密钥大小。如果它有 3072 或 4096 位长度,那么你很好。不到那个,你可能想要升级它。1024 位长度甚至被认为是不安全的。
- ECDSA :这取决于您的机器生成用于创建签名的随机数的能力。ECDSA 使用的 NIST 曲线也存在可信度问题。
- Ed25519 :这是当今最受推荐的公钥算法!
ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/creplus -C "creplus"
系统会要求您输入此密钥的密码,使用强密码或者直接回车
-o
: 使用新的 OpenSSH 格式而不是 PEM 格式保存私钥。实际上,当您将密钥类型指定为ed25519
.-a
: 是KDF(Key Derivation Function)轮数。数字越大,密码短语验证越慢,如果私钥被盗,则增加对暴力破解密码的抵抗力。-t
:指定要创建的密钥类型,在我们的例子中是 Ed25519, 如果需要rsa走默认或者 指定rsa-f
: 指定生成的密钥文件的文件名。如果你想让 SSH 代理自动发现它,它必须存储在你的主目录中默认的 .ssh 目录中。-C
:指定注释的选项。
然后使用ssh-copy-id部署密钥到服务器端
ssh-copy-id -i .ssh/creplus.pub xxuser@xxx-server
如果你多个密钥 ,可以指定特定密钥指向特定服务
可以在文件中添加一个条目~/.ssh/config
来配置这些选项
Host home-server
HostName home-server
IdentityFile /Users/xxx/.ssh/creplus
User creplus
Host github.com www.github.com
IdentityFile ~/.ssh/github