LINUX.ORG.RU
решено ФорумAdmin

Отправка почты c помощью mail в bash скрипте

 ,


0

1

OS: Raspbian Платформа: Raspberry Pi 2 Имеется следующий скрипт:

#!/bin/bash
up=$(uptime)
host=$(hostname)
email_logfile=./ssh_login_failure_warnings.txt
ssh_auth=/var/log/auth.log
email=your_email
fail=$(grep "authentication failure\|Failed password for" $ssh_auth | wc -l)
ipaddr=$(ifconfig |grep "inet addr:" |grep -oP '\d+\.\d+\.\d+\.\d+' | head -n 1)
echo "Привет! Я сервер $host мой ip $ipaddr, uptime $up, с момента последней перезагрузки" > $email_logfile
if [ $fail == 0 ]
then
echo "ко мне никто не ломился." >> $email_logfile
mail -s "Всё хорошо" $email | < $email_logfile
exit
else
echo "зарегистрировано $fail неудачных попыток входа" >> $email_logfile
mail -s "Нужно ваше внимание!" $email | < $email_logfile
fi
exit
На этапе «mail -s» повисает, отдельно от скрипта команда выполняется, /usr/bin/mail подставлять вместо mail пробовал(где-то упоминалось) но безрезультатно. Может кто-нибудь подсказать где может быть затык? Варианты с php пожалуйста, не предлагайте. Крайне желателен вариант с mail. Также пробовал вариант с ssmtp но через ssmtp письмо приходит пустым.

Ответ на: комментарий от legolegs

Не совсем понял в чём вопрос

Возможно к разметке, разметку поправил, теперь должно быть чуть более понятно) вопрос изложен в последних 2 строках поста)

WorstPilot ()
Ответ на: комментарий от legolegs

Спасибо!

Не заметил, теперь когда вертикальная черта отсутствует код выполняется корректно. Спасибо! А не могли бы вы подсказать ещё кое что? Я работаю под пользователем pi и когда я отправляю письмо адресатом значится, pi@raspberrypi можно это как-то поправить? Чтобы отображался реальный e-mail адрес, на Яндексе, а не pi@raspberrypi? Или так и должно быть, и можно это не править?

WorstPilot ()

Как-то так:

#!/bin/bash
up=$(uptime)
host=$(hostname)
email_logfile=./ssh_login_failure_warnings.txt
ssh_auth=/var/log/auth.log
email=your_email
fail=$(grep "authentication failure\|Failed password for" $ssh_auth | wc -l)
ipaddr=$(ifconfig |grep "inet addr:" |grep -oP '\d+\.\d+\.\d+\.\d+' | head -n 1)
if [ $fail -eq 0 ]; then
        msg2="ко мне никто не ломился"
        subj="Всё хорошо"
else
        msg2="зарегистрировано $fail неудачных попыток входа"
        subj="Нужно ваше внимание!"
fi
echo "Привет! Я сервер $host мой ip $ipaddr, uptime $up,
С момента последней перезагрузки $msg2" | mail -s "$subj" $email

vodz ★★★★★ ()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: Спасибо! от WorstPilot

Большинство почтовых серверов увидят, чтоо какая-то мелкая хрень выдаёт себя за Яндекс и не примут такое письмо. Но можно выставить reply-to

legolegs ★★★★★ ()
Ответ на: комментарий от legolegs

Но можно выставить reply-to

У таких писем должна быть приписка: отправлено роботом, читать не умеет.

vodz ★★★★★ ()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

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

legolegs ★★★★★ ()
Ответ на: комментарий от legolegs

Не должно быть таких приписок. За каждым роботом должен стоять человек

Работа данного робота в данном случае и заключается в отправке владельцу/дежурному админу оповещений. Отвечать на эти письма - полная глупость, как впрочем и ваш комментарий.

vodz ★★★★★ ()
Ответ на: Спасибо! от WorstPilot

pi@raspberrypi можно это как-то поправить?

echo 1|mail -s test i@example.com — -sendmail-options -f'<i2@example.com>'

Но это от версии mail зависит.

AS ★★★★★ ()
Ответ на: комментарий от legolegs

Отправка письма

Дело в том что если я всё правильно понимаю, письмо уходит не силами mail, а силами ssmtp, который контачится с smtp.yandex.ru с вполне валидными логином и пассом вида e-mail.yandex.ru,и потом уже при отправке, переправляет e-mail@yandex.ru на pi@raspberrypi,и выдаёт себя за raspberrypi ВМЕСТО Yandex. Что насколько я знаю далеко не best practice. А как пофиксить или понять в чём проблема, в силу недостатка знаний не знаю.

WorstPilot ()
Ответ на: комментарий от vodz

Отвечать на эти письма - полная глупость, как впрочем и ваш комментарий.

Если сервер не твой личный, и ты не настроил там исключений, то произвольный почтовый сервер может просто послать лесом такое твоё сообщение. Потому, что smtp callback.

AS ★★★★★ ()
Ответ на: Отправка письма от WorstPilot

а силами ssmtp

В силу того, что bin/sendmail фактически стандарт, то mta, отличные от настоящего Sendmail, имеют врапер, который, по большей части, эмулирует поведение Sendmail в командной строке. По крайней мере Postfix. Наверное, ssmtp тоже должен иметь.

AS ★★★★★ ()
Ответ на: комментарий от AS

Если сервер не твой личный [а] произвольный почтовый сервер

То тогда вообще лучше таким способом не оповещать. :)

vodz ★★★★★ ()
Ответ на: комментарий от AS

Вопрос

А могу я где-то в конфигах ssmtp указать в принудительном порядке указать чтобы в поле from: был указан не pi@raspberrypi, а моё_мыло@yandex.ru которое и является логином для отправки сего письма?

WorstPilot ()
Ответ на: комментарий от AS

В силу того, что bin/sendmail фактически стандарт, то mta

А может для начала проверить, вдруг есть опция -r у mail(x) ?

vodz ★★★★★ ()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

По факту

Насколько я понимаю ничего «противозаконного» это оповещение не делает, оно логинится на ящик Яндекса, и отправляет письмо от имени Яндекса. Но самовольная смена поля From: настораживает

WorstPilot ()
Ответ на: комментарий от vodz

вдруг есть опция -r у mail(x) ?

Зачем ? У mail, кторый mailx, её нет, но есть -sendmail-options (или -r сделали недавно ?). -r есть у mail, кторый из GNU mailutils (и там много что ещё есть, кстати).

AS ★★★★★ ()
Последнее исправление: AS (всего исправлений: 4)
Ответ на: По факту от WorstPilot

и отправляет письмо от имени Яндекса.

Для избежания подземного сука надо, чтобы в envelope from либо был живой e-mail, либо <>. В последнем случае могут тоже не принять, но это уже принимающая сторона будет ССЗБ.

AS ★★★★★ ()
Ответ на: По факту от WorstPilot

Но самовольная смена поля From: настораживает

Это не произвольное. Это локальный пользователь от локального имени хоста. А туда куда вы логинитесь - это «кому», а не от «кого». Если это одно и тоже, то это не почта, а извращение.

vodz ★★★★★ ()
Ответ на: комментарий от AS

Зачем ? У mail, кторый mailx, её нет, но есть -sendmail-options (или -r сделали недавно ?). -r есть у mail, кторый из GNU mailutils (и там много что ещё есть, кстати).

У Heirloom mailx давно уже есть -r.

anc ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.