我使用 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?