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

Я бы хотел, чтобы мой сервер OpenSSH запускал скрипт всякий раз, когда пользователь входит в систему, используя SSH, в идеале передавая имя хоста или IP, а также имя пользователя. Кроме того, я бы хотел, чтобы он запускал скрипт всякий раз, когда сеанс завершается (передавая имя пользователя). Эти сценарии должны выполняться не в сеансе пользователя, а во всей системе.

Идея состоит в том, чтобы сделать звуковое предупреждение при входе и выходе, например с помощью espeak и для отображения информации на внешнем дисплее.

Я видел, что есть пакет pam-scripts, но я не уверен, что он делает то, что я хочу, и как его использовать.

12
задан 6 June 2016 в 22:00

5 ответов

Я уже видел это совпадение событий в лог-файле (что позволит вам гибко сопоставлять что угодно). Эта страница плохо отформатирована, но она может помочь вам начать: https://help.ubuntu.com/community/AudibleLogs#Play с esound

0
ответ дан 6 June 2016 в 22:00

Вы можете использовать sshrc (man sshd, ищите sshrc)

ssh выполнит / etc / ssh / sshrc, если он существует, и вы можете запустить один скрипт (или вызвать несколько скриптов) оттуда [ 113]

вы можете вызвать любую переменную bash, например $USER, или получить IP через

read -d " " ip <<< $SSH_CONNECTION

, вы можете написать скрипт для тестирования или записи того, что вы когда-либо захотите.

Сценарий выхода из системы ... ну, это то, что я ищу! : D

0
ответ дан 6 June 2016 в 22:00

Вы можете навязать команду своим 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: помните, что этот скрипт запускается от имени пользователя, вошедшего в систему, поэтому вы не можете делать все, что хотите, если измените его, чтобы добавить больше функций ...

0
ответ дан 6 June 2016 в 22:00

Я думаю , 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

0
ответ дан 6 June 2016 в 22:00

(Ответьте перекрестно на один и тот же вопрос на ServerFault )

Просто напишите сценарий, чтобы делать все, что вы хотите, а затем вставьте его в /etc/profile или, возможно, /etc/bash.bashrc в зависимости на ваши нужды. Изменения в этих файлах будут применяться ко всем пользователям. Однако я не уверен, как вы будете уведомлять о выходе из системы при таком подходе.

В качестве альтернативы, другим способом сделать это было бы простое наблюдение за демоном /var/log/auth для новых (и завершающих) сессий ssh. Таким образом он сможет отправлять уведомления как при входе, так и при выходе из системы.

0
ответ дан 6 June 2016 в 22:00

Другие вопросы по тегам:

Похожие вопросы: