У некоторых пользователей возникли проблемы с использованием 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.