Ubuntu

多個伺服器上每個使用者的 ssh-agent 程序過多

  • February 19, 2020

一些使用者似乎在他們的登錄環境中使用 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實例數量的最簡單方法是將systemdpam_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 也會終止。

引用自:https://serverfault.com/questions/1003772