本文针对的是全新安装 deepin 15.9.2 之后的版本,如果出现 gnome-keyring 不支持 SSH ED25519 私钥的问题,请采用下面的方法解决。
产生问题 我之前使用 ED25519 格式的 SSH 私钥(设置了密码)登录一些服务器,不用 RSA 的原因是 ED25519 更安全一些,秘钥也短一些。 之前在一台从 deepin 15.6 安装并一路升级的 deepin 上一直用得好好的,从终端登录服务器并不需要每次输入私钥的密码,但另一台全新安装的 deepin 15.10.1,则ssh登录时报错: sign_and_send_pubkey: signing failed: agent refused operation Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
问题的原因 经过一番研究(过程就不说了,很漫长),发现原因如下: 1、deepin 能“记住”SSH 私钥的密码靠的是 gnome-keyring 这个软件,当你首次使用私钥登录服务器时,它会询问你私钥的密码,并记住它。gnome-keyring 起到了 ssh-agent 和 ssh-add 的作用,如果 gnome-keyring 正常工作,你就不需要直接使用 ssh-agent 和 ssh-add 了。 2、gnome-keyring 直到 3.28 才支持 ED25519,发布于去年。deepin 的 panda 源里 gnome-keyring 版本是 3.28,所以我之前一路升级的 deepin用着没问题。但全新安装的 deepin 15.10.1 采用 lion 源,里面的 gnome-keyring 版本是 3.20,不支持 ED25519,所以就悲剧了。 3、gnome-keyring 要正常工作,还需要其它软件包的配合,包括 libpam-gnome-keyring 和 gcr (GNOME crypto services),他们的版本要匹配。
解决方法 1、升级 gnome-keyring libpam-gnome-keyring gcr (GNOME crypto services) 这3个包到 3.28 以上: sudo aptitude install -t panda gnome-keyring libpam-gnome-keyring gcr 请添加 panda 源:解决deepin 15.9.2以后版本软件太旧的问题,混合lion与panda源使用。 2、删除旧的 gnome-keyring 数据: rm ~/.local/share/keyrings/* 3、注销,登录,从终端访问一个 ssh 主机,应该会弹出对话框“输入密码以解锁私钥”。输入私钥的密码,并可以选中“每当我登录时自动解锁该秘钥”。这样以后登录后都不用输入密码解锁私钥了。 注:如果仍然不行,可通过 journalctl --user --since hh:mm | grep -i keyring 查看日志里的错误。
相关主题 |