Крюк выхода SSH

Ну, что происходит, когда вы делаете перенаправление stdin (<), так это то, что первый файл - и только первый - открывается и его содержимое передается в stdin mail, который использует его в качестве тела.

Поскольку ваша реализация mailx старая, она не поддерживает флаг -a текущей версии для создания MIME-вложений. Вместо этого вы можете создать формат MIME самостоятельно, используя имеющиеся возможности.

К счастью, это несложно сделать с помощью простого bash-скрипта (который, я уверен на 100%, доступен даже на RHEL 5 :-) ), что-то простое, как это, вероятно, подойдет:

#!/bin/bash
msgid="$RANDOM$RANDOM$RANDOM$RANDOM"
to="$1"
shift
subject="$1"
shift
echo "To: $to"
echo "From: secret-admirer@example.com"
echo "Subject: $subject"
echo "Message-ID: $msgid"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=$msgid"
echo "" # header termination
while [ -n "$1" ]; do 
    echo "--$msgid"
    echo "Content-Type: text/plain; charset=UTF-8"
    echo "Content-Disposition: attachment; filename=\"$(basename $1)\""
    echo "Content-Transfer-Encoding: base64"
    echo ""
    base64 < "$1"
    shift
done

Затем вам нужно только отправить полученный текст письма в sendmail для доставки, что-то вроде этого:

mail.sh "$SUBJECT" "$EMAIL" /home/user/checks/notprocessed.txt \
   /home/user/checks/dirlist.txt | sendmail -t

Этот сценарий использует команду base64 для "ASCII-бронирования" файлов, поэтому вы можете отправлять как текстовые, так и двоичные файлы, хотя, если вы не отправляете текстовые файлы, вам, вероятно, нужно выяснить, как правильно установить Content-type вложения (или просто изменить его на application/octet-stream, т.е. "двоичный"). т.е. "двоичный"). Эта команда доступна в составе coreutils на RHEL 5, поэтому я не ожидаю, что возникнут проблемы с ее использованием.

Также обратите внимание на использование флага -t в sendmail, чтобы MTA просто считывал конверт письма из самого письма, поэтому нет необходимости вводить что-либо еще в аргументы команды sendmail. Просто убедитесь, что скрипт включает все необходимые поля в вывод - я заставил его читать получателя и тему из командной строки, как это делает mailx, но это не обязательно, а адрес отправителя все равно жестко закодирован.

0
14.11.2018, 18:28
2 ответа

Похоже, что для этой проблемы не существует ssh-решения.

Итак, я реализовал функцию bash для псевдонима ssh:

function ssh {
  set_title $1

  $(which ssh) $@

  set_title "$(whoami) @$(hostname)"
}

Поскольку моя проблема в основном связана с интерактивными сеансами ssh, это работает для меня.

1
28.01.2020, 04:09

Не sshконкретно, но, как вы упоминаете bash, вы рассматривали ~/.bash_logout? Может быть, расширено специальным разделом ssh?

1
28.01.2020, 04:09

Теги

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