Есть ли у кого-нибудь скрипт bash, который будет отправлять или уведомлять кого-то в случае успешного входа на сервер ssh? Я хочу получить уведомление, если кто-нибудь войдет в мою личную папку.
Я использую Ubuntu 12.04 для запуска xfce
Есть ли у кого-нибудь скрипт bash, который будет отправлять или уведомлять кого-то в случае успешного входа на сервер ssh? Я хочу получить уведомление, если кто-нибудь войдет в мою личную папку.
Я использую Ubuntu 12.04 для запуска xfce
Предупреждение: в соответствии с комментариями это не работает, если пользователь создает файл с именем ~/.ssh/rc
.
Измените или создайте /etc/ssh/sshrc
со следующим содержимым:
ip='echo $SSH_CONNECTION | cut -d " " -f 1'
logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | sendemail -q -u "SSH Login" -f "Originator <[email protected]>" -t "Your Name <[email protected]>" -s smtp.server.com &
Это будет эффективно уведомлять вас по электронной почте в любое время, когда кто-то регистрируется через SSH, и логин будет занесен в syslog.
Примечание. Для получения уведомления по электронной почте вам понадобится пакет sendemail
( sudo apt-get install sendemail
).
Примечание. работает с переадресацией портов, но с параметром -N нет.
Предупреждение: Как всегда, когда вы меняете конфигурацию входа, оставьте резервный сеанс ssh открытым в фоновом режиме и протестируйте логин с нового терминала.
Так как метод sshrc
не работает, если у пользователя есть свой файл ~/.ssh/rc
, я объясню, как это сделать с pam_exec
, как предлагалось @adosaiguas. Хорошо, что это также можно легко адаптировать к типам входа, отличным от ssh
(например, локальным входам или даже ко всем входам), подключаясь к другому файлу в /etc/pam.d/
.
Сначала вам нужно будет отправлять почту из командной строки. Есть и другие вопросы. На почтовом сервере, вероятно, проще всего установить mailx
(который, вероятно, уже установлен в любом случае).
Затем вам нужен исполняемый файл сценария login-notify.sh
(например, я помещаю его в /etc/ssh/
) со следующим содержимым. Вы можете изменить переменные, чтобы изменить тему и содержание уведомления по электронной почте. Не забудьте выполнить chmod +x login-notify.sh
, чтобы сделать его исполняемым.
#!/bin/sh
# Change these two lines:
sender="[email protected]"
recepient="[email protected]"
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
. Тогда логин не будет возможен, если выполнение вашего скрипта hook не будет успешным (если это то, что вы хотите).
Для тех из вас, кто нуждается в объяснении того, что такое PAM и как это работает, здесь очень хорошо один . р>
Мы использовали monit для мониторинга процессов в наших linux-блоках. monit может также оповещать по электронной почте об успешном входе в систему через ssh. Наш monit config выглядит следующим образом
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: Написал более подробный пост в блоге это
Поместите следующее в /etc/profile
:
if [ -n "$SSH_CLIENT" ]; then
TEXT="$(date): ssh login to ${USER}@$(hostname -f)"
TEXT="$TEXT from $(echo $SSH_CLIENT|awk '{print }')"
echo $TEXT|mail -s "ssh login" [email protected]
fi
/etc/profile
выполняется при каждом входе в систему (для пользователей оболочки bash). Оператор if возвращает true только в том случае, если пользователь выполнил вход через ssh, что, в свою очередь, приведет к запуску отступающего кода. Р>
Затем мы создадим текст сообщения:
$(date)
будет заменено выходом команды date
${USER}
будет заменено именем пользователя $(hostname -f)
будет заменено полным именем хоста системы, зарегистрированной в Вторая строка TEXT
добавляет к первой, указывая IP-адрес системы, с которой этот пользователь регистрируется. Наконец, сгенерированный текст отправляется по электронной почте на ваш адрес. Р>
Резюме Linux по умолчанию будет записывать каждый системный логин, будь то ssh или нет, в файлы системного журнала, но иногда - особенно для системы, к которой редко можно обращаться через ssh - может быть полезно быстрое и грязное уведомление. Р>
В этом другом вопросе у вас, вероятно, есть то, что вы ищете. В основном вы можете добавить вызов команды электронной почты в скрипт, который запускается, когда пользователь входит в систему через ssh: /etc/pam.d/sshd
Я только что изменил ответ @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 <[email protected]>" &
Это работает на серверах 14.04, 16.04 и Centos 6.5.x, которые я настроил, я уверен, что вам нужно обеспечить настройку mta, но как только это будет сделано, это работает. Предупреждения следующего шага twilio
Я взял некоторые из превосходных ответов из этой темы и сделал что-то более или менее копируемое и пакуемое. Он использует 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