解决新版 deepin 的 gnome-keyring 不支持 SSH ED25519 私钥的问题
Tofloor
poster avatar
duanyao
deepin
2019-06-29 01:46
Author
本帖最后由 duanyao 于 2019-6-28 17:48 编辑

此处“新版”是指 15.9.2 之后全新安装的 deepin 系统。


我之前使用 ED25519 格式的 SSH 私钥(设置了密码)登录一些服务器。不用 RSA 的原因是 ED25519 更安全一些,秘钥也短一些。
之前在一台从 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( https://bugzilla.gnome.org/show_bug.cgi?id=775981 ),发布于去年。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 源: https://bbs.deepin.org/post/179163


2. 删除旧的 gnome-keyring 数据:


rm ~/.local/share/keyrings/*

3. 注销,登录,从终端访问一个 ssh 主机,应该会弹出对话框“输入密码以解锁私钥”。输入私钥的密码,并可以选中“每当我登录时自动解锁该秘钥”。这样以后登录后都不用输入密码解锁私钥了。

如果仍然不行,可通过 journalctl --user --since hh:mm | grep -i keyring 查看日志里的错误。


Reply Favorite View the author
All Replies

No replies yet