GNOME 密钥环守护程序有时不要求密码,需要通过命令行提供

GNOME 密钥环守护程序有时不要求密码,需要通过命令行提供

我使用 CentOS 7.5 机器,设置了 pubkey 身份验证以 ssh 到远程服务器。通常,当我 ssh 到第一台服务器时,我会收到一个 GNOME 图形提示,要求输入密码来解锁密钥,因此在 GNOME 会话期间不再询问。

但是,有时我会直接在终端中被要求输入密码:

Enter passphrase for key '/home/dr01/.ssh/id_rsa': 

这很烦人,因为每次连接到服务器时我都必须输入密码。因此,在这些情况下,我只需重新启动机器即可。


GNOME 密钥环守护进程在启动时以/usr/bin/gnome-keyring-daemon --start --components=pkcs11.

重启没有效果:

[dr01@centos7 ~]$ /usr/bin/gnome-keyring-daemon -r 
** Message: Replacing daemon, using directory: /run/user/1001/keyring
GNOME_KEYRING_CONTROL=/run/user/1001/keyring
SSH_AUTH_SOCK=/run/user/1001/keyring/ssh

之后它仍然在命令行中要求输入私钥的密码。

我也尝试过重新启动它

/usr/bin/gnome-keyring-daemon -r --unlock

但它挂起了。 Astrace打印这个:

(...)
read(3, "\335{\232\316.\353\335\22\16\277\321\f\326A\334\272\2\342\227\246V`\262\265\300\213@\273>%\303\2"..., 120) = 120
getrusage(RUSAGE_SELF, {ru_utime={0, 2440}, ru_stime={0, 7321}, ...}) = 0
times({tms_utime=0, tms_stime=0, tms_cutime=0, tms_cstime=0}) = 429541253
futex(0x7f0889a5e548, FUTEX_WAKE_PRIVATE, 2147483647) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f088aa6a000
mmap(NULL, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f088aa66000
mlock(0x7f088aa66000, 16384)            = 0
read(0, 

并在 后冻结read(0,

我该如何解决这个问题?

答案1

当终端中出现密码提示时,可能意味着SSH_AUTH_SOCK环境变量尚未传递给ssh该上下文中的命令。

当使用 GNOME 密钥环守护程序作为 SSH 代理(或者实际上任何 SSH 代理)时,该SSH_AUTH_SOCK变量应指向由 SSH 代理程序(在您的情况下为 GNOME 密钥环守护程序)创建的 UNIX 套接字,或者sshd,如果您正在通过 SSH 连接进行工作,并且代理连接转发已启用。

换句话说,也许您做了一些导致用户环境被重置的事情。也许你已经使用过sudo并且不在允许保存的SSH_AUTH_SOCK环境变量列表中?sudo或者也许您正在运行其他程序的 shell 转义函数,并且该程序不会将SSH_AUTH_SOCK变量传递给它运行的 shell?

相关内容