Как настроить оповещение по электронной почте при успешном входе в систему ssh?

Вместо этого используйте df -H. Разница, которую вы видите, связана с различием в реальных GB / TB (коэффициент 1024) и продаж GB / TBs (коэффициент 1000).

1
задан 18 September 2012 в 06:05

7 ответов

Предупреждение. Как всегда, когда вы меняете конфигурацию входа, оставьте резервный сеанс ssh открытым в фоновом режиме и протестируйте логин с нового терминала.

Поскольку метод sshrc не работает, если у пользователя есть свой файл ~/.ssh/rc, я объясню, как это сделать с помощью pam_exec в качестве предложенного @adosaiguas. Хорошо, что это также можно легко адаптировать к типам входа, отличным от ssh (например, к локальным входам или даже ко всем входам), подключаясь к другому файлу в /etc/pam.d/.

Сначала вам нужно чтобы отправлять почту из командной строки. Есть и другие вопросы.

Тогда вам нужен исполняемый файл сценария login-notify.sh (например, я помещал его в /etc/ssh/) с помощью mailx (который, вероятно, уже установлен). следующего содержания. Вы можете изменить переменные, чтобы изменить тему и содержание уведомления по электронной почте. Не забудьте выполнить chmod +x login-notify.sh, чтобы сделать его исполняемым.

#!/bin/sh

# Change these two lines:
sender="sender-address@example.com"
recepient="notify-address@example.org"

if [ "$PAM_TYPE" != "close_session" ]; then
    host="`hostname`"
    subject="SSH Login: $PAM_USER from $PAM_RHOST on $host"
    # Message to send, e.g. the current environment variables.
    message="`env`"
    echo "$message" | mailx -r "$sender" -s "$subject" "$recepient"
fi

После этого вы можете добавить следующую строку в /etc/pam.d/sshd:

session optional pam_exec.so seteuid /path/to/login-notify.sh

Для тестирования модуль включается как optional, поэтому вы можете войти в систему, если выполнение завершилось с ошибкой. После того, как вы убедитесь, что он работает, вы можете изменить optional на required. Тогда логин будет недоступен, если выполнение вашего сценария крючка не будет успешным (если это то, что вам нужно).

Для тех из вас, кто нуждается в объяснении того, что такое PAM и как он работает, здесь очень хороший.

54
ответ дан 25 May 2018 в 07:13
  • 1
    В нем говорится: /etc/ssh/login-notify.sh failed: exit code 13 сразу после входа в систему :( – FelikZ 29 August 2014 в 18:43
  • 2
    Вы сделали исполняемый файл сценария, выполнив chmod +x /etc/ssh/login-notify.sh? Кроме того, вы можете отправлять почту вручную, используя команду mailx, используемую в скрипте? – Fritz 29 August 2014 в 19:14
  • 3
    Спасибо, он отлично работает. Просто убедитесь, что UsePAM установлен на yes в вашем sshd_config. – Nicolas BADIA 11 March 2015 в 12:11
  • 4
    Вероятно, вы должны удалить fork (&), если в файле sshd есть required, потому что mailx может выйти из строя, но пользователь все равно может войти в систему. Кроме того, сценарий запускается как root, поэтому убедитесь, что mailx также настроен для root – texasflood 4 October 2015 в 16:55
  • 5
    Просто записка для меня или других людей, которые новичков в Селинью. Я получил ошибку разрешения, когда pam_exec запускал скрипт. Позже я узнал, что он неправильно помечен для Selinux. Я клонировал скрипт в / bin /, который будет автоматически помечен как unconfined_u:object_r:bin_t:s0. Тогда я chmod +x /bin/login-notify.sh, и он работает. – RedGiant 18 January 2017 в 21:12

Мы использовали monit для мониторинга процессов в наших linux-блоках. monit также может оповещать по электронной почте о успешных входах по ssh. Наш конфигуратор monit выглядит так:

 check file ssh_logins with path /var/log/auth.log  
     # Ignore login's from whitelist ip addresses
     ignore match "100.100.100.1"    
     # Else, alert
     if match "Accepted publickey" then alert

Примечание: Конфигурация почтового сервера, формат электронной почты и т. Д. Должны быть установлены в файле monitrc

Update: Написал более подробный monit на этом

8
ответ дан 25 May 2018 в 07:13

Поместите следующее в /etc/profile:

if [ -n "$SSH_CLIENT" ]; then 
    TEXT="$(date): ssh login to ${USER}@$(hostname -f)" 
    TEXT="$TEXT from $(echo $SSH_CLIENT|awk '{print $1}')" 
    echo $TEXT|mail -s "ssh login" you@your.domain 
fi

Как работает скрипт

/etc/profile выполняется при каждом входе в систему (для пользователей оболочки bash). Оператор if возвращает true только в том случае, если пользователь выполнил вход через ssh, что, в свою очередь, приведет к запуску отступающего кода.

Затем мы создадим текст сообщения:

$(date) будет заменен выходом команды date ${USER} будет заменен логином пользователя имя $(hostname -f) будет заменено полным именем хоста системы, зарегистрированной в

Вторая строка TEXT добавляет к первой, указывая IP-адрес системы, с которой этот пользователь входит в систему. Наконец, сгенерированный текст отправляется по электронной почте на ваш адрес.

Резюме Linux по умолчанию будет записывать каждый системный логин, будь то ssh или нет, в файлы системного журнала, но иногда - особенно для системы, к которой редко можно обращаться через ssh - быстрое и грязное уведомление может быть полезна.

4
ответ дан 25 May 2018 в 07:13

В этом другом вопросе у вас, вероятно, есть то, что вы ищете. В основном вы можете добавить вызов к команде mail в скрипте, который запускается, когда пользователь входит в систему через ssh: /etc/pam.d/sshd

1
ответ дан 25 May 2018 в 07:13

Этот скрипт в /etc/ssh/sshrc отправляет электронное письмо и добавляет журнал в системный регистратор. Различие сделано (так что вы можете отключить его, если хотите) между вашей личной подсети и всемирной паутиной (требуется sudo apt-get install mailutils).

SUBNET="192.168.0"

IP=`echo $SSH_CONNECTION | cut -d " " -f 1`
CURRENT_SUBNET="$(echo $IP|cut -d'.' -f1-3)"
if [ "$CURRENT_SUBNET" = "$SUBNET" ]; then
        msg="This message comes from same subnet! User $USER just logged in from $IP"
        echo $msg|mail -s "$msg" root
else
        msg="This message comes from different subnet! User $USER just logged in from $IP"
        echo $msg|mail -s "$msg" root
fi

logger -t ssh-wrapper $USER login from $IP
1
ответ дан 25 May 2018 в 07:13

Я только что изменил @SirCharlo ответ

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | mail -s "SSH Login" "who to <who-to@youremail.com>" &

Это работает на серверах 14.04, 16.04 и Centos 6.5.x, которые я установил, я уверен, что вам нужно обеспечить, чтобы mta настроен, но как только это будет сделано, это будет очаровывать. Следующий шаг twilio alert

0
ответ дан 25 May 2018 в 07:13

Я взял некоторые из превосходных ответов из этой темы и сделал что-то более или менее копируемое и пакуемое. Он использует Mailgun для отправки электронных писем, поэтому вы избавляетесь от любых проблем с настройкой STMP. Вам просто нужен ключ API Mailgun и отправляющий домен.

После входа в систему SSH скрипт отправит данные о имени входа (имя пользователя, имя хоста, IP-адрес и все текущие переменные среды) на адрес электронной почты. Легко добавить другие параметры, которые вы хотите отправить, настроив переменную message.

#!/bin/sh

# this script is triggered on SSH login and sends an email with details of the login
# such as user, IP, hostname, and environment variables

# script should be placed somewhere on the server, eg /etc/ssh
# to trigger on SSH login, put this line in /etc/pam.d/sshd:
#   session optional pam_exec.so seteuid /etc/ssh/snippet-for-sending-emails-on-SSH-login-using-PAM.sh

# Script settings
MAILGUN_API_KEY=
MAILGUN_DOMAIN=
SENDER_NAME=
SENDER_EMAIL_ADDRESS=
RECIPIENT_EMAIL_ADDRESS=

if [ "$PAM_TYPE" != "close_session" ]; then
    host=$(hostname)
    ip=$(dig +short myip.opendns.com @resolver1.opendns.com) # gets public IP
    # Message to send, e.g. the current environment variables.
    subject="SSH login - user:$USER pam-host:$PAM_RHOST host:$host ip:$ip" \
    message=$(env)
    curl -s --user '$MAILGUN_API_KEY' \
        https://api.mailgun.net/v3/$MAILGUN_DOMAIN/messages \
        -F from='$SENDER_NAME <$SENDER_EMAIL_ADDRESS>' \
        -F to=$RECIPIENT_EMAIL_ADDRESS \
        -F subject="$subject" \
        -F text="${subject} ${message}"
fi
0
ответ дан 25 May 2018 в 07:13

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

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