Назад | Перейти на главную страницу

слишком много процессов 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:~$

Пожалуйста, подскажите, как решить эту проблему. Спасибо

Ваш пользователь, вероятно, порождает эти ssh-агентв его сценариях инициализации оболочки (.profile, .bashrc или аналогичный), но забыл убить агента в сценариях выхода из системы. Возможно, даже появятся глобальные сценарии инициализации оболочки 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.