按照有关设置 gnupg 来管理 ssh 密钥的教程,我成功地运行了多个 gpg-agent 实例:
[root@frylock ~]# ps aux | grep agent
root 2764 0.0 0.0 4208 432 ? Ss 11:15 0:00 ssh-agent
xtian 2785 0.0 0.1 3500 972 ? Ss 11:18 0:00 gpg-agent -s --enable-ssh-support --daemon --write-env-file /home/frylock/xtian/.gnupg/gpg-agent.env
root 2958 0.0 0.0 3168 688 ? Ss 11:39 0:00 gpg-agent -s --enable-ssh-support --daemon --write-env-file /root/.gnupg/gpg-agent.env
root 3036 0.0 0.0 4740 392 ? Ss 11:43 0:00 gpg-agent --daemon
root 3186 0.0 0.0 4740 388 ? Ss 11:53 0:00 gpg-agent --daemon
root 3299 0.0 0.0 4740 388 ? Ss 11:58 0:00 gpg-agent --daemon
root 3549 0.0 0.0 4740 392 ? Ss 12:54 0:00 gpg-agent --daemon
我可以通过第五次回顾说明来解决大部分混乱。但我不明白的是,当我只以 root 身份登录一个 tty 时,为什么我的用户帐户所有者是正在运行的进程?
答案1
一般来说,注销会终止与用户交互方式连接的应用程序。当您登录到文本终端(本地或远程)时,当您注销时(直接由内核或间接由 shell),连接到该终端的所有应用程序都会被终止。当您登录到图形环境时,当您注销时,所有连接到 X 服务器的应用程序都会被终止(或者更准确地说,与 X 服务器的连接被切断,这会导致大多数应用程序退出)。
注销不会终止用户启动的所有进程。用户可能想让程序在后台运行,或者登录到多个会话。
ssh-agent
和等应用程序gpg-agent
不是交互式的,因此它们不连接到任何终端或 X 服务器。正常的设置会安排他们通过其他方式被杀死。通常,代理是整个会话的父进程:会话启动脚本安排运行类似ssh-agent $SHELL
或 的内容ssh-agent $SESSION_MANAGER
。这样,当作为会话领导者的子进程退出时,代理也会退出(因为这就是代理的设计方式)。如果代理以不同方式启动,则由会话管理器安排终止它。
当您在遵循该教程的同时进行实验时,您显然以教程作者没有预料到的方式启动了许多代理进程,并且它们并没有随着您的会话而终止。你可以杀死那些你不使用的。一旦您达到稳定的设置,请检查代理在您注销时是否被杀死。 (除非您更喜欢运行单个代理并让它永久运行,这在个人计算机上可能是一个合理的选择。)