Я бы хотел, чтобы мой сервер OpenSSH запускал скрипт всякий раз, когда пользователь входит в систему, используя SSH, в идеале передавая имя хоста или IP, а также имя пользователя. Кроме того, я бы хотел, чтобы он запускал скрипт всякий раз, когда сеанс завершается (передавая имя пользователя). Эти сценарии должны выполняться не в сеансе пользователя, а во всей системе.
Идея состоит в том, чтобы сделать звуковое предупреждение при входе и выходе, например с помощью espeak
и для отображения информации на внешнем дисплее.
Я видел, что есть пакет pam-scripts
, но я не уверен, что он делает то, что я хочу, и как его использовать.
Я уже видел это совпадение событий в лог-файле (что позволит вам гибко сопоставлять что угодно). Эта страница плохо отформатирована, но она может помочь вам начать: https://help.ubuntu.com/community/AudibleLogs#Play с esound
Вы можете использовать sshrc (man sshd, ищите sshrc)
ssh выполнит / etc / ssh / sshrc, если он существует, и вы можете запустить один скрипт (или вызвать несколько скриптов) оттуда [ 113]
вы можете вызвать любую переменную bash, например $USER
, или получить IP через
read -d " " ip <<< $SSH_CONNECTION
, вы можете написать скрипт для тестирования или записи того, что вы когда-либо захотите.
Сценарий выхода из системы ... ну, это то, что я ищу! : D
Вы можете навязать команду своим SSH-пользователям вместо той, которую они запрашивают (или их оболочке, если они не дают конкретной команды). Это можно сделать, указав для этой команды что-то вроде ForceCommand /root/ssh-wrapper
в /etc/ssh/sshd_config
(не имеет значения, где находится скрипт или как он называется, просто убедитесь, что он выполняется всеми пользователями, а файл конфигурации sshd указывает на Это). Вам также нужно перезагрузить / перезагрузить sshd
. Исходная команда доступна для принудительной команды как $SSH_ORIGINAL_COMMAND
.
Я только что взломал этот сценарий вместе:
#! /bin/sh
# add logger options when needed
log="logger -t ssh-wrapper"
# find IP address
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
$log $USER login from $ip
espeak "$USER just logged in from $ip" > /dev/null 2>&1
$log command: ${SSH_ORIGINAL_COMMAND:-shell}
${SSH_ORIGINAL_COMMAND:-shell}
$log $USER logout
espeak "$USER just logged out" > /dev/null 2>&1
Теперь каждый раз, когда я вхожу в систему или выходу из системы, голос сообщает мне об этом, и запись в журнале записывается в системный журнал. Это также регистрирует команду. Вы можете использовать что-то вроде следующего, чтобы «следить» за вашим использованием sshd:
tailf /var/log/syslog | grep ssh-wrapper
Обратите внимание, что этот скрипт в основном не проверен, поэтому используйте его на свой страх и риск! ; -) [ 1111]
PS: помните, что этот скрипт запускается от имени пользователя, вошедшего в систему, поэтому вы не можете делать все, что хотите, если измените его, чтобы добавить больше функций ...
Я думаю , PAM является наилучшим вариантом. Это в масштабе всей системы и не может быть переопределено файлами конфигурации пользователя.
можно выполнить эти шаги. Они работали на меня на Ubuntu 14.04.4 LTS.
Выполнение:
$ sudo pico /opt/custom/bin/info-session.sh
Редактирование, что пустой файл и добавляет эти строки:
#!/bin/sh
[ "$PAM_TYPE" = "open_session" ] || exit 0
INFO=$(date +"%Y/%m/%d %T $PAM_USER ($PAM_RHOST) $PAM_SERVICE $PAM_TTY") # You can customize message.
echo "PAM access: $INFO" | write user > /dev/null 2>&1 # See Note 1.
exit 0
После этого, дайте, выполняют разрешение к сценарию:
$ sudo chmod ugo+x /opt/custom/bin/info-session.sh
Теперь, выполненный:
$ sudo pico /etc/pam.d/common-session
Добавляют эти строки в конце файла:
# Modified by user:
session optional pam_exec.so /opt/custom/bin/info-session.sh
нет никакой потребности перезапустить любой сервис. Обратите внимание, что этот скрипт будет также запущен, когда пользователь войдет в систему от терминала вместо SSH.
Примечание 1: можно передать по каналу к espeak
или любой другой процесс, который соответствует потребностям (электронная почта, продвиньте уведомление, и так далее...). Если Вы используете write
и , пользователь зарегистрирован, он будет видеть выходные сигналы непосредственно на их терминале.
Ссылки:
https://blog.stalkr.net/2010/11/login-notifications-pamexec-scripting.html
https://blog.redbranch.net/2014/06/04/pam_exec-so-execute-commands-on-user-login /
Связанный:
, Как я настраиваю предупреждение по электронной почте, когда вход в систему ssh успешен?
https://serverfault.com/questions/400613/how-can-i-configure-my-server-to-notify-me-whenever-it-is-remotely-accessed-via
https://serverfault.com/questions/395393/email-notification-about-each-ssh-connection-to-linux-server
(Ответьте перекрестно на один и тот же вопрос на ServerFault )
Просто напишите сценарий, чтобы делать все, что вы хотите, а затем вставьте его в /etc/profile
или, возможно, /etc/bash.bashrc
в зависимости на ваши нужды. Изменения в этих файлах будут применяться ко всем пользователям. Однако я не уверен, как вы будете уведомлять о выходе из системы при таком подходе.
В качестве альтернативы, другим способом сделать это было бы простое наблюдение за демоном /var/log/auth
для новых (и завершающих) сессий ssh. Таким образом он сможет отправлять уведомления как при входе, так и при выходе из системы.