Ubuntu
多個伺服器上每個使用者的 ssh-agent 程序過多
一些使用者似乎在他們的登錄環境中使用 ssh-agent 時遇到了問題。例如,sri 有 1295 個在 login02 上執行。許多其他使用者也有同樣的問題。
我在其他機器上看到了同樣的問題,其他人也看到了同樣的問題。
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:~$
請指導我如何解決此問題。謝謝
您的使用者可能在他的 shell 初始化腳本(或類似腳本)中生成了那些ssh-agent,但忘記在註銷腳本中終止代理。甚至可能全域 shell 初始化腳本也會產生ssh-agent的。
.profile``.bashrc
停止此過程的一種方法是為您的使用者提供一種系統範圍的方式來管理ssh-agent。
控制ssh-agent實例數量的最簡單方法是將systemd與pam_systemd一起使用。這將為每個登錄的使用者生成一個SystemD 使用者管理器,並在最後一個使用者會話退出時終止。此外,它允許定義使用者服務,其生命週期獨立於使用者會話。
Ubuntu 16.04不提供 ssh-agent
.service
文件(較新版本提供),但您可以通過添加包含內容的文件自己創建一個:/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-agent 。**您可以通過以下方式檢查其狀態:
systemctl --user status ssh-agent.service
- 每個會話中的每個 ssh 客戶端都可以訪問相同的ssh-agent,
- 當最後一個使用者會話終止時,ssh-agent 也會終止。