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

Ubuntu / Debian / OpenSSH: запускать (системный) скрипт при входе в систему и / или выходе из системы через SSH

В 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