![多台服务器上每个用户的 ssh-agent 进程过多](https://linux22.com/image/748694/%E5%A4%9A%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%AF%8F%E4%B8%AA%E7%94%A8%E6%88%B7%E7%9A%84%20ssh-agent%20%E8%BF%9B%E7%A8%8B%E8%BF%87%E5%A4%9A%20.png)
一些用户似乎在登录环境中使用 ssh-agent 时遇到了问题。例如,sri 在 login02 上运行了 1295 个 ssh-agent。许多其他用户也遇到了同样的问题。
我在其他机器上和其他人也看到了同样的问题。
sri 32586 0.0 0.0 11144 0 ? Ss 2019 0:00 ssh-agent
sri 32598 0.0 0.0 11144 1304 ? Ss Jan13 0:03 ssh-agent
sri 32608 0.0 0.0 11148 0 ? Ss 2019 0:00 ssh-agent
sri 32610 0.0 0.0 11152 0 ? Ss Jan22 0:00 ssh-agent
sri 32640 0.0 0.0 11148 0 ? Ss 2019 0:00 ssh-agent
sri 32643 0.0 0.0 11148 0 ? Ss 2019 0:00 ssh-agent
sri 32656 0.0 0.0 11144 0 ? Ss 2019 0:00 ssh-agent
sri 32711 0.0 0.0 11152 0 ? Ss 2019 0:00 ssh-agent
sri 32715 0.0 0.0 11144 0 ? Ss 2019 0:00 ssh-agent
sri 32755 0.0 0.0 11152 0 ? Ss 2019 0:00 ssh-agent
sri 32765 0.0 0.0 11148 0 ? Ss 2019 0:00 ssh-agent
root@login02:~$ ps -aux | grep ssh-agent | grep sri | wc -l
1295
root@login02:~$ ps -aux | grep ssh-agent | wc -l
1509
root@login02:~$
请指导我如何解决此问题。谢谢
答案1
你的用户可能正在产生这些ssh 代理在他的 shell init 脚本中(.profile
或.bashrc
类似脚本),但忘记在注销脚本中终止代理。也许甚至全局 shell init 脚本也会生成ssh 代理的。
阻止此过程的一种方法是向用户提供一种系统范围的管理方式ssh 代理的。
控制数量的最简单方法ssh 代理实例是使用systemd和...一起pam_systemd.这将产生一个SystemD 用户管理器为每个登录用户提供服务,并在最后一个用户会话退出时终止。此外,它还允许定义用户服务,其生命周期与用户会话无关。
Ubuntu 16.04不提供 .service
文件ssh 代理(较新的版本有),但你可以通过添加包含内容的文件自己创建一个/etc/systemd/user/ssh-agent.service
:
[Unit]
Description=OpenSSH Agent
Documentation=man:ssh-agent(1)
Before=default.target
Wants=dbus.socket
After=dbus.socket
[Service]
ExecStart=/usr/bin/ssh-agent -D -a %t/ssh-agent
以及目录中文件的符号链接/etc/systemd/user/default.target.wants
:
mkdir -p /etc/systemd/user/default.target.wants
ln -s ../ssh-agent.service /etc/systemd/user/default.target.wants
后面跟着一个systemctl daemon-reload
。您还需要添加/etc/bash.bashrc
以下行:
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent
经过此配置步骤后:
用户第一次连接到系统时,ssh 代理将会生成。你可以使用以下命令检查其状态:
systemctl --user status ssh-agent.service
每个会话中的每个 ssh 客户端都可以访问相同的ssh-代理,
当最后一个用户会话终止时,ssh-agent 也会终止。