多台服务器上每个用户的 ssh-agent 进程过多

多台服务器上每个用户的 ssh-agent 进程过多

一些用户似乎在登录环境中使用 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 也会终止。

相关内容