В Ubuntu я бы хотел, чтобы мой сервер OpenSSH запускал сценарий всякий раз, когда пользователь входит в систему с использованием SSH, в идеале передавая имя хоста или IP-адрес, а также имя пользователя. Кроме того, я бы хотел, чтобы он запускал скрипт всякий раз, когда сеанс завершается (передача имени пользователя). Эти сценарии должны выполняться не в сеансе пользователя, а в масштабе всей системы.
Идея состоит в том, чтобы выдавать звуковое предупреждение при входе в систему и выходе из системы, например с помощью espeak
, и для отображения информации на внешнем дисплее.
Я видел, что есть pam-scripts
пакет, но я не уверен, что он делает то, что я хочу, и как его использовать.
Любая помощь приветствуется! - Маркус
(Я также разместил этот вопрос на Аскубунту.)
Вот сценарий оболочки, который будет вызываться ForceCommand в sshd_config. Это различает команду входа в систему и команду, вызываемую через ssh, например ssh host "ls -l"
, так как вы, возможно, захотите обработать их по-другому.
#!/bin/bash
if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
eval $SSH_ORIGINAL_COMMAND
else
echo "LOGIN: $USER $SSH_CONNECTION" >> /tmp/ssh.log
$SHELL
echo "LOGOUT: $USER $SSH_CONNECTION" >> /tmp/ssh.log
fi
Вы можете заменить эхо-команды на все, что захотите. Информация об IP находится в $SSH_CONNECTION
, Делай с этим что хочешь.
Если вы назовете это /usr/local/bin/ssh-command.sh
, вы бы добавили это в свой sshd_config
:
ForceCommand /usr/local/bin/ssh-command.sh
Вероятно, стоит использовать Match
а также для перехвата только определенных пользователей. Предполагая, что все пользователи находятся в группе "gobias":
Match Group gobias
ForceCommand /usr/local/bin/ssh-command.sh
В любом случае, возможно, стоит попробовать.
Просто напишите сценарий, чтобы делать все, что хотите, а затем вставьте его /etc/profile
или возможно/etc/bash.bashrc
в зависимости от ваших потребностей. Изменения в этих файлах будут применяться ко всем пользователям. Однако я не уверен, как вы будете уведомлять о выходе из системы с помощью этого подхода.
В качестве альтернативы, другой способ сделать это - использовать простой мониторинг демона. /var/log/secure
(или /var/log/auth
, в зависимости от того, какой дистрибутив вы используете) для новых (и закрывающихся) сеансов ssh. Таким образом, он сможет отправлять уведомления как при входе в систему, так и при выходе из системы.
Если файл / etc / ssh / sshrc существует, он запускается sh (1) после чтения среды пользователя, но перед запуском оболочки или команды пользователя. Видеть man sshd
.
Например, следующее, добавленное в / etc / ssh / sshrc, даст результат, отображаемый при успешном входе пользователя в систему через OpenSSH:
~$ cat /etc/ssh/sshrc
echo "Login by $USER from $SSH_CLIENT on `date`" >> /var/log/ssh_connections.log
Вывод в /var/log/ssh_connections.log:
Login by Markus from 10.0.0.1 57853 22 on Fri Oct 29 03:41:31 2010