Запустить (системный) скрипт при входе и / или выходе из SSH
12
Я бы хотел, чтобы мой сервер OpenSSH запускал скрипт всякий раз, когда пользователь входит в систему, используя SSH, в идеале передавая имя хоста или IP, а также имя пользователя. Кроме того, я бы хотел, чтобы он запускал скрипт, когда сеанс завершается (передавая имя пользователя). Эти сценарии должны выполняться не во время сеанса пользователя, а во всей системе.
Идея состоит в том, чтобы сделать звуковое предупреждение при входе и выходе из системы, например, используя espeak, и отобразить информацию на внешнем дисплее.
Я видел, что есть pam-scriptsпакет, но я не уверен, что он делает то, что я хочу, и как его использовать.
Вы можете навязать команду своим SSH-пользователям вместо того, который они запрашивают (или их оболочке, если они не дают конкретной команды). Это можно сделать, указав для этой команды что-то вроде ForceCommand /root/ssh-wrapperin /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
Обратите внимание, что этот скрипт в основном не тестировался, поэтому используйте его на свой страх и риск! ;-)
PS: помните, что этот скрипт запускается как пользователь, который вошел в систему, поэтому вы не можете делать все, что хотите, если вы измените его, чтобы добавить больше функций ...
Привет, есть ли способ обнаружить ситуацию, когда пользователь просто закрыл окно с ssh-клиентом. Ваш сценарий не перехватывает эту ситуацию .. Спасибо.
Дмитрий Эскин
Должен ли shellв $ {SSH_ORIGINAL_COMMENT: -shell} быть заменен фактическим путем к оболочке, например. / бен / Баш? Когда я просто пытаюсь запустить это, он жалуется, что нет такой команды, как shell. На самом деле, я думаю, что вы имели в виду $ SHELL? Это должно запустить указанную пользователем оболочку.
Ибрагим
1
Я видел это совпадение событий в файле журнала раньше (что позволит вам гибко сопоставлять что угодно). Эта страница плохо отформатирована, но она может помочь вам начать:
https://help.ubuntu.com/community/AudibleLogs#Play with esound
Я думаю, что вы / они имеют в виду, espeakа не esound?
JanC
0
(Ответьте перекрестно на один и тот же вопрос на ServerFault )
Просто напишите сценарий, чтобы делать все, что вы хотите, а затем вставьте его /etc/profileили, возможно, в /etc/bash.bashrcзависимости от ваших потребностей. Изменения в этих файлах будут применяться ко всем пользователям. Однако я не уверен, как вы будете уведомлять о выходе из системы при таком подходе.
В качестве альтернативы, другим способом сделать это было бы простое наблюдение /var/log/authза демонами для новых (и закрывающихся) сессий ssh. Таким образом, он сможет отправлять уведомления как при входе, так и при выходе.
# Modified by user:
session optional pam_exec.so /opt/custom/bin/info-session.sh
Нет необходимости перезапускать какой-либо сервис. Обратите внимание, что этот сценарий также будет запускаться, когда пользователь входит в систему с терминала вместо SSH.
Примечание 1: Вы можете направить espeakили любой другой процесс, который соответствует вашим потребностям (электронная почта, push-уведомления и т. Д.). Если вы используете writeи пользователь вошел в систему, он или она увидит выходные сообщения непосредственно на своем терминале.
shell
в $ {SSH_ORIGINAL_COMMENT: -shell} быть заменен фактическим путем к оболочке, например. / бен / Баш? Когда я просто пытаюсь запустить это, он жалуется, что нет такой команды, как shell. На самом деле, я думаю, что вы имели в виду $ SHELL? Это должно запустить указанную пользователем оболочку.Я видел это совпадение событий в файле журнала раньше (что позволит вам гибко сопоставлять что угодно). Эта страница плохо отформатирована, но она может помочь вам начать: https://help.ubuntu.com/community/AudibleLogs#Play with esound
источник
espeak
а неesound
?(Ответьте перекрестно на один и тот же вопрос на ServerFault )
Просто напишите сценарий, чтобы делать все, что вы хотите, а затем вставьте его
/etc/profile
или, возможно, в/etc/bash.bashrc
зависимости от ваших потребностей. Изменения в этих файлах будут применяться ко всем пользователям. Однако я не уверен, как вы будете уведомлять о выходе из системы при таком подходе.В качестве альтернативы, другим способом сделать это было бы простое наблюдение
/var/log/auth
за демонами для новых (и закрывающихся) сессий ssh. Таким образом, он сможет отправлять уведомления как при входе, так и при выходе.источник
Вы можете использовать sshrc (man sshd, поиск sshrc)
ssh выполнит / etc / ssh / sshrc, если он существует, и вы можете запустить один скрипт (или вызвать несколько скриптов) оттуда
Вы можете вызвать любую переменную bash,
$USER
получить или получить IP черезВы можете написать скрипт для тестирования или записать то, что вы хотите.
Сценарий выхода из системы ... ну, это то, что я ищу! : D
источник
Я считаю PAM лучшим вариантом. Он общесистемный и не может быть переопределен конфигурационными файлами пользователя.
Вы можете следовать этим шагам. Они работали для меня на Ubuntu 14.04.4 LTS.
Бегать:
Отредактируйте этот пустой файл и добавьте следующие строки:
После этого дайте разрешение на выполнение скрипту:
Теперь запустите:
Добавьте эти строки в конец файла:
Нет необходимости перезапускать какой-либо сервис. Обратите внимание, что этот сценарий также будет запускаться, когда пользователь входит в систему с терминала вместо SSH.
Примечание 1: Вы можете направить
espeak
или любой другой процесс, который соответствует вашим потребностям (электронная почта, push-уведомления и т. Д.). Если вы используете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 -Логин пользователя/
Связанный:
Как настроить оповещение по электронной почте при успешном входе в систему через ssh?
/server/400613/how-can-i-configure-my-server-to-notify-me-whenever-it-is-remotely-accessed-via
/server//questions / 395393 / электронный-уведомление-о-каждый-SSH-подключения-к-Linux-сервер
источник